![](/img/trans.png)
[英]Pausing background thread with AutoResetEvent.WaitOne() and .Set()
[英]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.