如果我不等待它,那么从Mvc.Controller动作方法调用的异步方法是否可以保证完成?

时间:2016-02-18 07:46:13

标签: c# asp.net-mvc

如果我有一个长时间运行的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的更具体信息,否则我会接受将此问题视为副本。

1 个答案:

答案 0 :(得分:0)

编辑:不,不保证(但差不多)

简答:是

答案很长:是的,但并非总是如此。

如果异步方法占用的时间超过默认超时时间,则会取消。但是,如果您已经发送了REST请求(或者任何远程命中并运行API),那么这应该没关系。

我解决此问题的方法是使用带队列的Azure Web作业。所以我的主要应用程序只是向“so something”发送请求,而Azure只是等待每个人完成另一个。虽然我的WEB服务器已经开始了。

编辑:回答问题。