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

Pet*_*ith 5 c# asp.net-mvc multithreading entity-framework async-await

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

  1. 将任务详细信息写入服务器并使用Windows服务处理它们UPDATE:这是使用的选项
  2. 使用async- 这似乎不是一个安全的选择
  3. 使用HostingEnvironment.QueueBackgroundWorkItem方法

选项3将是首选,因为它将所有代码保存在一个解决方案中.如果可能的话,请你评论每一个的利弊,并指出3号工作的例子.

L-F*_*our 6

HostingEnvironment.QueueBackgroundWorkItem是一个有效的解决方案,但请记住,长时间运行的进程可能会中断,例如,如果应用程序池回收.

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