如何从MVC创建一个长时间运行的后台任务

时间:2015-01-27 11:46:24

标签: c# asp.net-mvc multithreading entity-framework async-await

我在VS 2013中使用EF6,MVC 5.我有一个长时间运行的任务导致超时错误,因此我想将其设置为单独的后台任务运行并立即返回到Web控制器。后台任务将向SQL服务器数据库报告进度。基本上,我需要的是 fire and forget 功能。似乎有很多选择:

  1. 将任务详细信息写入服务器并使用Windows服务处理它们更新这是使用的选项
  2. 使用async - 这似乎不是一个安全的选择
  3. 使用HostingEnvironment.QueueBackgroundWorkItem方法
  4. 选项3将是首选,因为它将所有代码保存在一个解决方案中。如果可能的话,请你评论每一个的利弊,并指出3号工作的例子。

1 个答案:

答案 0 :(得分:5)

HostingEnvironment.QueueBackgroundWorkItem是valid solution,但请记住,长时间运行的进程可能会中断,例如,如果应用程序池回收。

更好的选择是在计划任务中运行它,例如使用Quartz.NET。