我需要在ASP.NET MVC站点上重复运行一个任务;它需要每个时间间隔运行(间隔无关紧要).
我通过设置运行任务的Global.asax.cs Application_Start中的后台线程来实现这一点,睡眠时间间隔然后再次运行….
虽然这样做似乎不是正确的方法,看起来有点hacky.
所以我用Timer对象替换它,这不能可靠地工作 – 似乎其他人也遇到了问题 – 所以我不打算用它.
这需要在MVC站点中运行,它用于从队列中提取作业并从Views中呈现它们以便发送电子邮件.
我考虑过使用ThreadPool并让前一个工作留下另一份工作,但是因为这些工作可能是长时间运行的工作,我已经读到这可能最终没有留下足够的线程来通过饥饿来处理Web请求.
在坚持使用原始线程方法之前,我想我会问其他人是否知道更好的方法.
我希望这是有道理的.实际上,我想要实现的是心跳.在MVC站点中充当生产者/消费者模式的消费者部分的东西.
解决方法
Stackoverflow本身使用(或至少习惯使用)这种方法的巧妙方式.见:
http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/
简而言之,你这样做:
At startup,add an item to the
HttpRuntime.Cache
with a fixed
expiration.When cache item expires,do your work,such as WebRequest or what have
you.Re-add the item to the cache with a fixed expiration.