使用异步等待返回视图

问题描述 投票:5回答:4

我有一个进程想在后台运行。单击操作链接即可执行此操作。

通话动作:

   public async Task<ActionResult> ProcessRec()
   {
        await Task.Run(() => waitTimer());
        return RedirectToAction("Index", "Home");
   }

   public void waitTimer()
   {
        Thread.Sleep(10000);
   }

然而,这会等待整整10秒钟,然后将我重定向到我的“索引首页”操作。我对Await / Async非常陌生,所以我知道我在这里解释错误。在后台执行waitTimer时,如何使应用程序返回此操作?谢谢!!

我有一个进程想在后台运行。单击动作链接即可执行此操作。调用操作:公共异步Task ProcessRec(){await ...

c# asp.net asynchronous async-await task-parallel-library
4个回答
5
投票
如您所见,

await阻止响应在完成之前返回给用户。通常,您只是将后台工作放在另一个线程上,然后通过不等待将其设置为“触发并忘记”,但是在ASP.NET中,IIS会关闭未使用的AppDomain,并且Task.Run不会通知IIS您的后台线程“正在使用AppDomain”,因此可以在AppDomain关闭期间使用Thread.Abort()终止后台线程。


2
投票

但是,这会等待整整10秒钟,然后将我重定向到“索引,首页”操作。


1
投票

我正在考虑将消息发送到队列(例如Azure存储/服务总线队列),以便您可以立即获得响应。


-1
投票
BackgroundTaskManager.Run(() => { waitTimer() };
return RedirectToAction("Index", "Home");
© www.soinside.com 2019 - 2024. All rights reserved.