ASP.NET MVC重复任务

Cra*_*ton 5 asp.net-mvc multithreading

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

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

虽然这样做似乎不是正确的方法,这似乎有点hacky.

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

这需要在MVC站点中运行,它用于从队列中提取作业并从Views中呈现它们以便发送电子邮件.

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

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

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

Tom*_*ler 9

Stackoverflow本身使用(或至少使用)一种巧妙的方式来做到这一点.见这里:http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

简而言之,你这样做:

  1. 在启动时,将项目添加到HttpRuntime.Cache具有固定到期日期的项目.

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

  3. 使用固定的到期时间将项重新添加到缓存中.