我有一个进程想在后台运行。单击操作链接即可执行此操作。
通话动作:
public async Task<ActionResult> ProcessRec()
{
await Task.Run(() => waitTimer());
return RedirectToAction("Index", "Home");
}
public void waitTimer()
{
Thread.Sleep(10000);
}
然而,这会等待整整10秒钟,然后将我重定向到我的“索引首页”操作。我对Await / Async非常陌生,所以我知道我在这里解释错误。在后台执行waitTimer时,如何使应用程序返回此操作?谢谢!!
我有一个进程想在后台运行。单击动作链接即可执行此操作。调用操作:公共异步Task
await
阻止响应在完成之前返回给用户。通常,您只是将后台工作放在另一个线程上,然后通过不等待将其设置为“触发并忘记”,但是在ASP.NET中,IIS会关闭未使用的AppDomain,并且Task.Run
不会通知IIS您的后台线程“正在使用AppDomain”,因此可以在AppDomain关闭期间使用Thread.Abort()
终止后台线程。
但是,这会等待整整10秒钟,然后将我重定向到“索引,首页”操作。
我正在考虑将消息发送到队列(例如Azure存储/服务总线队列),以便您可以立即获得响应。
BackgroundTaskManager.Run(() => { waitTimer() };
return RedirectToAction("Index", "Home");