为什么要在ASP.NET应用中执行后台任务?
主要是考虑使用后台任务来处理CPU或IO密集的计算。
下面是一些常见的后台任务:
- 大量的提醒和新闻邮件发送
- 图片和视频处理(比如批量创建缩略图、格式转换)
- 从外部文件导入大量数据或导出数据(RSS聚合)
- 文件操作(创建归档、清理临时文件、日志文件维护)
- 定时生成自动化报告
- 数据库维护
- ……
ASP.NET不知道任何后台线程比如一个计时器或者其他,它只知道和request相关的操作。事实上,在后台长时间的运行某些任务实在不是web server该做的事情,通常都可以用其他的方式来避免这样做,比如:用console application和Windows任务管理器,或者使用Windows服务等。
但是有时考虑到 不想单独部署服务器:开发、部署简单,伸缩简单,省钱,确实想在ASP.NET应用中执行后台任务,还是有一些办法的:
办法1、HostingEnvironment.QueueBackgroundWorkItem
让你调度小型的后台任务,ASP.NET的运行时会跟踪这些任务,并阻止IIS突然结束工作进程直到其完成。由此让ASP.NET应用程序能够可靠地调度异步任务。
不过需要把项目配置为使用.NET 4.5.2
办法2、Hangfire
HangFire是一个开源的类库,提供简单的方法在ASP.NET中执行后台Long-Running任务。这个类库需要一些额外的存储上的支持,SQLServer,Redis或者MSMQ。HangFire的资料在http://hangfire.io/