2016-12-17 10 views
3

APIを記述しようとすると、と私は似解決しようとした奇妙な場合があります。私は、そのメソッドを待つしようとしている私のPostメソッドの間非同期メソッドはメソッドの呼び出しの代わりに変数をブロックできますか?

 if (!request.WillCheckGetLater) 
     { 
      // Client calling is willing to wait only for certain amount of time 
      var clientWillingToWaitFor = GetResponseTime(request); 
      var needsToUpdateResponse = await AwaitResponse(heldBidRequest, clientWillingToWaitFor); 
      SendMessage(...); 
      return needsToUpdateResponse; 
     } 
     else 
     { 
      SendMessage(...); 
      return false; 
     } 

を。基本的に私はポストを取得すると、私は "短い"答えを構築し、クライアントはAPIからGETメソッドで "長い"答えをチェックしますが、POSTで長い答えを直接聞くこともできますが、多くの彼はその長い答えを待つつもりです。そうでなければ、私は "短い"答えにデフォルト...

私のSendMessageメソッドは、私が購読してメッセージを公開する基本的なサードパーティ通信システムです。理想的に私はむしろそれが代わりにリターンでブロックされなければならず、上行

var needsToUpdateResponse = await AwaitResponse(heldBidRequest, clientWillingToWaitFor); 

実行し、そのブロックは、コードとのSendMessageのこの作品は、タスクまで実行されません、今

、。

私はSendMessageを呼び出す必要はありませんまず、奇妙なシナリオのために、私はそれを待つために設定する前に、メッセージからの応答が来ることができます。

私はそれを行うために何ができるのでしょうか?

答えて

5

はい

実際には、 "変数"(実際には、戻り値)で待機しているすでにです。メソッドだけを待つことはできません。

Task<T> needsToUpdateResponse = AwaitResponse(heldBidRequest, clientWillingToWaitFor); 
SendMessage(...); 
return await needsToUpdateResponse; 
+0

ありがとうBradley、それでした:) – CPay

0

あなたがからawaiterを取得することができます。

var needsToUpdateResponse = AwaitResponse(heldBidRequest, clientWillingToWaitFor); 
SendMessage(...); 
return await needsToUpdateResponse; 

我々はvarを使用しなかった場合、それはより明白になります:ちょうどあなたが準備ができているときawaitそれを代わりにTのタスクをオフに保存し、あなたが望むところで結果を得ることができます。しかし、基本的には結果が必要なときにメソッドを待っています。

この参照を参照してくださいhttps://stackoverflow.com/a/17284612/819153

関連する問題