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

How to create a long running background task from MVC

我在 VS 2013 中使用 EF6、MVC 5。我有一个很长的 运行 任务导致超时错误,所以我想将它 运行 设置为单独的后台任务并且return 立即到网络控制器。后台任务将向 SQL 服务器数据库报告进度。本质上,我需要的是 fire and forget 功能。似乎有多种选择:

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

选项 3 是首选,因为它将所有代码保存在一个解决方案中。请您评论一下每项的优缺点,如果可能的话,请指出第 3 项的工作示例?

HostingEnvironment.QueueBackgroundWorkItemvalid solution,但请记住,长时间 运行ning 过程可能会中断,例如,如果应用程序池回收。

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