尝试编写API,我有一个奇怪的案例,我试图解决如下:
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;
}
在我的Post方法中,我试图等待该方法。基本上当我收到帖子时,我会构建一个"短片"回答,并且客户检查" long"回答API中的GET方法,但也可以直接在POST中询问长答案,但必须指定他愿意等多长时间答案,否则我默认为#34;短"回答...
我的SendMessage方法基本上是我订阅和发布消息的第三方通信系统。
现在,当行
var needsToUpdateResponse = await AwaitResponse(heldBidRequest, clientWillingToWaitFor);
执行,它会阻止这段代码并且SendMessage不会执行直到任务结束,理想情况下我宁愿在返回时阻止它。
我没有必要想要调用SendMessage First只是因为奇怪的情况我可以得到消息的响应在我设置等待它之前。
关于我可以用来做什么的任何想法?
答案 0 :(得分:5)
是强>
实际上,你已经等待“变量”(实际上是返回值)。您无法等待方法,只能等待任务。准备好后,只需存储任务而不是T
和await
:
var needsToUpdateResponse = AwaitResponse(heldBidRequest, clientWillingToWaitFor);
SendMessage(...);
return await needsToUpdateResponse;
如果我们不使用var
:
Task<T> needsToUpdateResponse = AwaitResponse(heldBidRequest, clientWillingToWaitFor);
SendMessage(...);
return await needsToUpdateResponse;
答案 1 :(得分:0)
您可以从任务中获取等待者,并获得您想要的结果。但是,当你需要结果时,基本上你在等待方法。