提问者:小点点

从mvc.controller操作方法调用的异步方法保证在我不等待它的情况下完成吗?[副本]


如果我有一个长时间运行的方法,我在操作方法中调用它而不等待它,是否保证即使从操作方法返回之后它也会完成?

示例:

[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的信息,否则我会接受将此问题作为重复问题结束。


共1个答案

匿名用户

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

简短的回答:是的

长答:是的,但并不总是。

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

我解决这个问题的方法是使用带有队列的Azure web作业。所以我的主应用程序只是发送请求到So Something和Azure只是等待每个完成后再开始另一个。而我的WEB服务器已经继续运行。

编辑:回答问题。

相关问题