当前位置: 首页 > 知识库问答 >
问题:

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

葛鸿熙
2023-03-14

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

示例:

[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个答案

闾丘成双
2023-03-14

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

简短的回答:是的

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

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

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

编辑:回答问题。

 类似资料:
  • 我正在编写一个WinForms应用程序,它将数据传输到USB HID类设备。我的应用程序使用了优秀的通用HID库V6.0,可以在这里找到。简单来说,当我需要向设备写入数据时,这是被调用的代码: 当我的代码退出while循环时,我需要从设备中读取一些数据。但是,设备无法立即响应,因此我需要等待此呼叫返回后再继续。由于当前存在,RequestToGetInputReport()声明如下: GetInp

  • 问题内容: 我当前正在使用subprocess.call()来调用另一个程序,但是它将阻塞正在执行的线程,直到该程序完成。有没有一种方法可以简单地启动该程序而无需等待返回? 问题答案: 使用代替:

  • 问题内容: 我不确定如何处理这种情况,因为我是iOS开发和Swift的新手。我正在像这样执行数据获取: 我的loadShows()函数解析从加载到UIWebView的网站中获取的大量数据。问题是我在loadShows函数中有一个等待10秒钟左右的计时器。这允许页面中的javascript在开始解析数据之前完全加载。我的问题是完成处理程序在我的loadShows()之前完成。 我想做的是为“ isC

  • 在实际应用中,我对 C# 中的异步和 await 方法进行了说明。请考虑以程,这是工作代码的简单版本: 助手.cs 功能控制器.cs processing.js 现在,问题是第三方服务的所需时间更少(例如:2秒),而所需的时间更多(例如:100秒)。进行两个ajax调用并使用异步和等待是为了呈现自我。屏幕上显示数据1,不要等到自己。Data2已被检索。不幸的是,这种情况没有发生,我必须等待100秒

  • 在C#中使用时,一般的规则是避免,因为这几乎是一个错误,如果方法没有发送返回值,则应该使用。有道理。奇怪的是,在本周早些时候,我为我编写的一些方法编写了一些单元测试,并注意到NUnit建议将测试标记为或返回。然后我试了一下,果然奏效了。这似乎真的很奇怪,因为nunit框架如何能够运行该方法并等待所有异步操作完成?如果它返回Task,它可以等待任务,然后做它需要做的事情,但是如果它返回void,它如

  • 问题内容: 我知道这个问题以前曾被问过,但是所有解决方案都不适合我。 我有一个将参数发送到API的函数,并以列表的形式返回数据。我有一个UITableView设置为使用该列表,但是它在列表分配给变量之前运行。 码: 如果不立即将其作为重复投票,我将不胜感激,这是我尝试的方法。 派遣组 信号量计时 运行变量 其中包括= self和= self 。 编辑:要求提取项目, 问题答案: 您不能-也不应该-