ASP.NET MVC重复任务

时间:2011-06-27 10:05:51

标签: asp.net-mvc multithreading

我需要在ASP.NET MVC站点上重复运行一个任务;它需要每隔时间间隔运行(间隔无关紧要)

我通过设置Global.asax.cs Application_Start中的后台线程来实现这一点,后者运行任务,休眠时间间隔然后再次运行....再次运行。

虽然这可行,但似乎不是正确的方法,看起来有点hacky。

然后我用Timer对象替换它,这不能可靠地工作 - 似乎其他人也遇到了问题 - 所以我不打算用它。

这需要在MVC站点中运行,它用于从队列中提取作业并从Views准备好发送电子邮件。

我考虑过使用ThreadPool并让上一个工作留下另一份工作,但是因为这些工作可能是长时间运行的工作我已经读过,这可能最终没有留下足够的线程来通过饥饿来处理Web请求

在坚持使用原始线程方法之前,我想我会问其他人是否知道更好的方法。

我希望这是有道理的。实际上,我想要实现的是心跳。在MVC站点中充当生产者/消费者模式的消费者部分的东西。

2 个答案:

答案 0 :(得分:9)

Stackoverflow本身使用(或至少习惯使用)这种方法的巧妙方式。见这里:http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

简而言之,你这样做:

  
      
  1. 启动时,将项目添加到HttpRuntime.Cache并修复   过期。

  2.   
  3. 当缓存项目到期时,请执行您的工作,例如WebRequest或具有的内容   您。

  4.   
  5. 使用固定的到期时间将项目重新添加到缓存中。

  6.   

答案 1 :(得分:0)

我知道你说过:

  

这需要在MVC网站上运行

但是我认为这是你做的事情的错误地方。

我个人将其设置为Windows服务并让服务检查数据库,根据需要编译电子邮件,并将电子邮件添加到排队服务。然后,电子邮件服务将与此分开,并将按时间间隔发送电子邮件。

目前阻止你使用其他方法而不是将其嵌入MVC网站有什么阻碍?