一尘不染

Thread.Sleep()的替代方法

c#

每隔N分钟,我们要运行一个任务列表。因此,我们创建了一个带有

do { DoWork(); }while(!stopRequested)

现在我们希望在工作周期之间有一个停顿。每个人似乎都认为Thread.Sleep()是魔鬼。我曾经提到过使用Monitor /
Event的东西,但是我们没有其他人告诉我们要做工作。我们只想每隔N分钟做一次类似发条的工作。

那么,有没有其他选择?或者我是否找到Thread.Sleep的有效用法?

另一篇文章中的某人提到了WaitHandle.WaitOne()作为替代方法,但是您显然不能从非静态方法中调用它吗?或至少我不能,因为我得到了一个编译时错误。

非静态字段,方法或属性’System.Threading.WaitHandle.WaitOne(System.TimeSpan)’需要对象引用


阅读 2172

收藏
2020-05-19

共1个答案

一尘不染

你要叫WaitOne 一个WaitHandle,肯定。这是一个实例方法。否则它将如何知道要等待什么?

最好
您对自己有反应而不是睡觉,这样一来您就可以毫无理由地注意到取消而无需等待几分钟。另一种替代方法WaitHandle是使用Monitor.Wait/
Pulse

但是,如果您使用的是.NET 4,我将研究Task Parallel Library提供的功能……它的级别比其他选项略高,并且通常是经过深思熟虑的库。

对于常规的工作任务,您可能需要使用Quartz.NETTimer(或System.Threading.TimerSystem.Timers.Timer)。

2020-05-19