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