2016-09-12 13 views
0

私は、次のコードを持っていますし、停止:待つ呼び出しは、プログラムの実行フローを停止さ

public async Task IntiateDataFetchingProcess(string[] args) 
{ 
    try 
    {   
     ProcessArgs(args); 

     Log.Information("Run Mode: {RunModeID}", RunModeID); 

     switch (RunModeID) 
     { 
      case RunModeType.A: 
       await MethodAAsync(); 
       break; 
      case RunModeType.B: 
       await MethodBAsync(); 
       break; 
      case RunModeType.C: 
       TestMethod(); 
       break; 
      default:      
       break; 
     } 
    } 
    catch (Exception ex) 
    {     
     throw; 
    }    
} 

private async Task MethodBAsync() 
{ 
    Console.WriteLine(DateTime.Now.ToLongTimeString()); 

    // Call to webservice to get the data 
    var response = await _service.GetDataAsync(input1, request); 

    Console.WriteLine(DateTime.Now.ToLongTimeString()); 
} 

は、デバッグに私は、実行コールが(MethodBAsync方法)以下のラインになることがわかりましたそこ。

var response = await _service.GetDataAsync(input1, request); 

私がここで紛失していることは誰でも知ることができます。

+0

「そこに止まる」とはどういう意味ですか?要求は完了しませんか? –

+0

コードの実行がそこで停止します。次の行に移動していません。 –

+0

@ santoshkumarpatro、そのメソッド内でブロッキングメソッド呼び出しがあるかどうかを確認してください。つまり、 '.Result'、' .Wait'など... – Nkosi

答えて

1

ああ、コードがデッドロックしています! await ingの各行に.ConfigureAwait(false);を追加するだけです。

例:

var response = await _service.GetDataAsync(input1, request);

はステファン・クリアリーがan awesome post on itを書いた、.ConfigureAwait()の詳細については

var response = await _service.GetDataAsync(input1, request).ConfigureAwait(false);

になります。

関連する問題