繁体   English   中英

AutoResetEvent.WaitOne,超时与Thread.Sleep

[英]AutoResetEvent.WaitOne with timeout vs Thread.Sleep

我需要一个解决方案来执行任意暂停。 延迟准确性无关紧要。 WaitHandle.WaitOne方法(TimeSpan)Thread.Sleep方法之间的这种情况有什么实际区别。 还有更好的解决方案吗?

如果你的规范说“在继续之前总是等待至少两秒钟”,请使用Sleep()。

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

它基本上就是这么简单。

基本上没有“性能差异”。 定时精度,因为两个调用使用相同的机制进行超时。

“更好”的解决方案 - 什么是“更好”? 在什么方面更好?

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

2.WaitOne(超时)导致线程等到任何一个

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

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

替代

如果您的代码优雅会受到使用WaitHandle ,那么您是否考虑过await Task.Delay(...) 这将使Thread.Sleep(...)具有类似功能,而不会阻塞线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM