asp.net web应用程序中的长时间运行任务(仅在用户操作时)

asp.net web应用程序中的长时间运行任务(仅在用户操作时),asp.net,windows-services,backgroundworker,job-scheduling,long-running-processes,Asp.net,Windows Services,Backgroundworker,Job Scheduling,Long Running Processes,我需要运行一个长时间运行的任务,如报表导出,报表导入功能,这将需要几分钟到几小时来完成任务。我想在用户从asp.net mvc视图发出命令后立即启动该任务 我找到了各种各样的门户网站,但我找不到我想要的确切解决方案,或者可能是我没有得到他们的想法(或者,受我的经验限制)。我不需要在某个时间间隔或某一天/周的某个时间戳运行的东西。我只需要在用户请求时执行后台作业,并在任务完成后在DB中更新任务。因此,后台作业需要始终仅由用户触发 我假设理想的解决方案是这样的,后台服务/作业始终处于就绪状态,可以在

我需要运行一个长时间运行的任务,如报表导出,报表导入功能,这将需要几分钟到几小时来完成任务。我想在用户从asp.net mvc视图发出命令后立即启动该任务

我找到了各种各样的门户网站,但我找不到我想要的确切解决方案,或者可能是我没有得到他们的想法(或者,受我的经验限制)。我不需要在某个时间间隔或某一天/周的某个时间戳运行的东西。我只需要在用户请求时执行后台作业,并在任务完成后在DB中更新任务。因此,后台作业需要始终仅由用户触发

我假设理想的解决方案是这样的,后台服务/作业始终处于就绪状态,可以在某种端口中接受来自web应用程序的触发器,并且一旦它从web应用程序接收到命令,它(a)在请求操作时将所有内容发送到作业(b),或者只拨动作业以启动其任务(基于调用操作前更新的db表条目)。因此,用户可以浏览应用程序中的其他页面,并可以在其中一个视图中查看所有此类任务的进度(甚至可以取消或查看已完成的任务)。请注意,不同的web用户可能会同时请求作业,这些作业应视为单独的作业(因为数据导出因用户访问权限而异)


我想使用简单的方法,100%保证任务按db记录完成/未完成(无服务崩溃)。最好的方法是什么(azure作业除外)因为我想在同一台服务器中实现该服务,并且如果需要,我可以访问服务器/虚拟机来安装windows服务/软件包。

请看一下Hanselman写的这篇伟大的文章:

另外,Hangfire是一个成熟的库,它可以使开发长时间运行的应用程序过程更加容易。