我有一个Windows服务(.NET 4),定期处理队列,例如每15分钟。我使用一个
这可以很容易地通过锁定、易失性布尔值或监视器来解决,但实际上在这种情况下应该使用什么,或者通常情况下的首选选项是什么?
我已经找到了其他帖子,几乎回答了这种情况(例如Volatile vs. Interlocked vs. lock),但需要一些关于将其扩展到具有立即退出的Timer示例的建议。
System.Threading.Timer
,在服务启动时设置它以每X毫秒触发回调。通常,每次运行需要几秒钟,并且从不冲突,但是如果我不能假设这一点 - 那么如果正在进行处理,则希望下一次运行立即退出。这可以很容易地通过锁定、易失性布尔值或监视器来解决,但实际上在这种情况下应该使用什么,或者通常情况下的首选选项是什么?
我已经找到了其他帖子,几乎回答了这种情况(例如Volatile vs. Interlocked vs. lock),但需要一些关于将其扩展到具有立即退出的Timer示例的建议。
timer.Change(Timeout.Infinite, Timeout.Infinite)
? - anton.burgerTimeout.Infinite
作为period
参数传递将导致计时器仅触发一次,因此一旦委托触发,计时器就已经被禁用。 - Boris B.