每隔N分钟,我们要运行一个任务列表。因此,我们创建了一个带有
do { DoWork(); }while(!stopRequested)
现在我们希望在工作周期之间有一个停顿。每个人似乎都认为Thread.Sleep()是魔鬼。我曾经提到过使用Monitor / Event的东西,但是我们没有其他人告诉我们要做工作。我们只想每隔N分钟做一次类似发条的工作。
那么,有没有其他选择?或者我是否找到Thread.Sleep的有效用法?
另一篇文章中的某人提到了WaitHandle.WaitOne()作为替代方法,但是您显然不能从非静态方法中调用它吗?或至少我不能,因为我得到了一个编译时错误。
非静态字段,方法或属性’System.Threading.WaitHandle.WaitOne(System.TimeSpan)’需要对象引用
你要叫WaitOne 上 一个WaitHandle,肯定。这是一个实例方法。否则它将如何知道要等待什么?
WaitOne
WaitHandle
最好 让 您对自己有反应而不是睡觉,这样一来您就可以毫无理由地注意到取消而无需等待几分钟。另一种替代方法WaitHandle是使用Monitor.Wait/ Pulse。
Monitor.Wait
Pulse
但是,如果您使用的是.NET 4,我将研究Task Parallel Library提供的功能……它的级别比其他选项略高,并且通常是经过深思熟虑的库。
对于常规的工作任务,您可能需要使用Quartz.NETTimer(或System.Threading.Timer或System.Timers.Timer)。
Timer
System.Threading.Timer
System.Timers.Timer