2016-12-17 37 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

其實,你是已經等待的 「變量」(真正的返回值)。你不能等待一種方法,只能是一項任務。只是存儲關閉任務,而不是Tawait它當您準備:

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

這將是比較明顯的,如果我們沒有使用var

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

謝謝布拉德利,那就是它:) – CPay