async方法可以阻塞变量而不是调用方法吗?

CPa*_*Pay 3 c# asp.net-web-api

试着写一个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;
        }
Run Code Online (Sandbox Code Playgroud)

在我的Post方法中,我正在尝试等待该方法.基本上当我收到帖子时,我构建一个"简短"答案,客户端使用API​​中的GET方法检查"长"答案,但也可以在POST中直接询问长答案,但必须指定如何他愿意等待那么长的答案,否则我默认为"简短"答案......

我的SendMessage方法基本上是第三方通信系统,我订阅和发布消息.

现在,当线

 var needsToUpdateResponse = await AwaitResponse(heldBidRequest, clientWillingToWaitFor);
Run Code Online (Sandbox Code Playgroud)

执行,它阻止这段代码,SendMessage直到任务结束才执行,理想情况下我宁愿在返回时阻止它.

我没有必要想要调用SendMessage First只是因为奇怪的情况我可以得到消息的响应在我设置等待它之前.

关于我可以用来做什么的任何想法?

Bra*_*NET 5

实际上,您已经在等待"变量"(实际上是返回值).您无法等待方法,只能等待任务.只是,而不是存储关闭的任务Tawait它,当你准备:

var needsToUpdateResponse = AwaitResponse(heldBidRequest, clientWillingToWaitFor);
SendMessage(...);
return await needsToUpdateResponse;
Run Code Online (Sandbox Code Playgroud)

如果我们不使用它会更明显var:

Task<T> needsToUpdateResponse = AwaitResponse(heldBidRequest, clientWillingToWaitFor);
SendMessage(...);
return await needsToUpdateResponse;
Run Code Online (Sandbox Code Playgroud)