如果我有一个长时间运行的async
方法,我在Mvc.Controller
操作方法中调用它而不等待它,是否保证即使在我从操作方法返回后它也会完成?
示例:
[HttpPost]
public ActionResult DoLongRunningTask() {
//not awaited async method
LongRunningTask();
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
public async Task LongRunningTask() {
await Task.Delay(5000);
}
编辑:
我在Google上搜索时发现How to safely call an async method in C# without await,但我想知道是否有人可以专门澄清有关ASP.NET MVC的内容。当仔细查看问题中的所有答案时,这个答案/链接中有一些信息:https://stackoverflow.com/a/15523793/585968,正如@MickyD所指出的那样。
除非某人有特别关于ASP.NET MVC的更具体信息,否则我会接受将此问题视为副本。
答案 0 :(得分:0)
编辑:不,不保证(但差不多)
简答:是
答案很长:是的,但并非总是如此。
如果异步方法占用的时间超过默认超时时间,则会取消。但是,如果您已经发送了REST请求(或者任何远程命中并运行API),那么这应该没关系。
我解决此问题的方法是使用带队列的Azure Web作业。所以我的主要应用程序只是向“so something”发送请求,而Azure只是等待每个人完成另一个。虽然我的WEB服务器已经开始了。
编辑:回答问题。