webcontroller {
async Task<ActionResult<string>> doSomething() {
var stringResult = await doSomethingAsync();
return stringResult;
}
}
这里的控制流是什么?控制器是在到达doSomething((方法调用后向客户端返回伪响应(ActionResult(,还是控件保留在web控制器中并向客户端返回stringResult?考虑doSomething((是做一些网络密集型任务,可能需要更多时间才能完成。如果可能的话,谁能向我解释一下吗?提前感谢!
控制器会向客户端返回伪响应(ActionResult(吗到达doSomething((方法调用或控件保留在web控制器中并将字符串Result返回给客户端
在doSomething
方法完成之前,它不会向客户端返回任何内容。
考虑doSomething((正在执行一些网络密集型任务完成可能需要更多时间
在这种情况下,客户端将超时。
你必须开始做背景工作。返回到已启动任务的客户端。然后以某种方式告诉客户任务已经完成。
另一个信息来源:WebAPI 中的长期运行任务
我建议阅读我写的一篇关于async
如何在ASP.NET上工作的文章。
控制器在到达doSomething((方法调用后会向客户端返回伪响应(ActionResult(吗?还是控件保留在web控制器中并向客户端返回字符串Result?
当doSomethingAsync
返回未完成任务时,doSomething
中的await
也将返回未完成的任务。然后,ASP.NET运行时(异步(等待该任务完成,然后再发送响应。
ASP.NET中的await
向线程池让步;它不会向客户端屈服。