AutoResetEvent.WaitOne,超时与Thread.Sleep

时间:2014-01-22 11:47:27

标签: c# .net multithreading waithandle

我需要一个解决方案来执行任意暂停。延迟准确性无关紧要。 WaitHandle.WaitOne Method (TimeSpan)Thread.Sleep Method之间的这种情况有何实际差异。有没有更好的解决方案?

3 个答案:

答案 0 :(得分:7)

如果你的规范说明了“等待至少等待两秒钟才能继续'”,请使用“睡眠”()。

如果你的规范说的是'等待来自另一个线程的信号最多两秒钟,如果超时则返回错误'使用事件对象。

基本上就这么简单。

基本上没有'性能差异'回覆。时间精度,因为两个调用使用相同的超时机制。

'更好的'解决方案 - 什么是更好?&#39 ;?在哪方面更好?

答案 1 :(得分:5)

1.Thread.Sleep(timeout)导致无条件等待,然后恢复执行。

2.WaitOne(超时)导致线程等到

  • 事件被触发,
  • 达到超时

答案 2 :(得分:1)

我反对永远使用Thread.Sleep(...) ...只是因为我不喜欢不必要地阻塞线程...所以使用WaitHandle我认为是优越的选择。

<强>替代

如果你的代码优雅会受到使用WaitHandle的影响,那你考虑过await Task.Delay(...)吗?这将使Thread.Sleep(...)的功能与{{1}}相似,而不会阻塞该线程。