我有一个用C#编写的ASP.NET MVC应用程序。我的一个动作如下:
[HttpPost]
public async Task<ActionResult> Save(int id, MyViewModel viewModel)
{
viewModel.SaveToDb();
await Backup.Save(viewModel);
return View(viewModel);
}
...
public class Backup
{
async public static Task Save(IBackup item)
{
// do stuff
}
}
Backup.Save功能实际上有很多功能。事实上,await Backup.Save(...)
目前需要10秒钟。出于这个原因,我想在后台运行它(异步)而不是(a)等待它。我想如果我刚删除了await
关键字,那就行了。但是,似乎并非如此。
如何运行备份会在后台异步保存,以便我的用户可以在没有长时间等待的情况下继续使用该应用程序?
谢谢!
答案 0 :(得分:2)
请看这里讨论: Can I use threads to carry out long-running jobs on IIS?
一个简单的替代方案是在不必使用线程或队列的情况下,通过客户端进行额外的异步调用,假设客户端是浏览器,可能通过Ajax进行。
如果您需要立即返回视图模型,则可能将其拆分为两种方法。一个获取视图模型,然后调用第二个在后台执行保存的方法。
这应该可以正常工作,因为如果你很乐意马上回来,你已经暗中同意将这两种行为之间的依赖性脱钩。
这有点像黑客,因为客户现在正在请求他们可能不需要知道或关心的行动。
答案 1 :(得分:0)
你可以创建一个采取动作或函数的方法(无论你需要什么),并运行一个线程,包含你需要在后台运行的任何东西。
基本上无论你选择哪种方式,都可以在一个单独的线程中运行该方法。