如果我有一个长时间运行的
示例:
[HttpPost]
public ActionResult DoLongRunningTask() {
//not awaited async method
LongRunningTask();
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
public async Task LongRunningTask() {
await Task.Delay(5000);
}
编辑:
在谷歌搜索时,我确实发现了如何在C#中安全调用异步方法而无需等待,但我想知道是否有人能具体说明一下ASP.NET MVC。当仔细查看问题中的所有答案时,以下答案/链接中有一些信息:https://stackoverflow.com/a/15523793/585968,如@mickyd所指出的。
除非有人有更具体的关于ASP.NET MVC的信息,否则我会接受将此问题作为重复问题结束。
编辑:不,不保证(但差不多)
简短的回答:是的
长答:是的,但并不总是。
如果异步方法占用的时间超过默认超时时间,它将被取消。但是如果您已经发送了REST请求(或任何远程命中运行API),那么这应该无关紧要。
我解决这个问题的方法是使用带有队列的Azure web作业。所以我的主应用程序只是发送请求到So Something和Azure只是等待每个完成后再开始另一个。而我的WEB服务器已经继续运行。
编辑:回答问题。