我需要一个解决方案来执行任意暂停。延迟精度无关紧要。 WaitHandle.WaitOne Method (TimeSpan)与Thread.Sleep Method之间在这种情况下的实际区别是什么。有没有更好的解决方案?AutoResetEvent.WaitOne与超时与Thread.Sleep
回答
如果你的规范说'等待来自另一个线程的信号最多两秒钟,如果超时返回错误'使用事件对象。
基本上就是这么简单。
基本上没有“性能差异”。由于两个调用都使用相同的超时机制,因此时序精确。
'更好'的解决方案 - 什么是'更好'?在哪方面更好?
更好的表现或更优雅。 –
1.Thread.Sleep(超时)在执行恢复前导致无条件等待。
2.WaitOne(超时)会导致线程等待,直到
- 该事件被触发,达到
那么你的主张是什么?我应该使用1st还是2nd? –
这取决于您的要求。我总是更喜欢基于信号的同步eg.WaitOne –
第一或第二种方式等待性能差异的部分在哪里? –
我会反对使用Thread.Sleep(...)
......因为我不喜欢阻塞一个不必要的线程......所以使用WaitHandle
我认为是最好的选择。
替代
如果你的代码的优雅会使用WaitHandle
受苦,那么你有没有考虑await Task.Delay(...)
?这将使功能与Thread.Sleep(...)
相似,而不会阻塞线程。
??等待事件句柄阻塞线程,就像sleep()调用一样。 –
@MartinJames但是没有阻塞线程......'Task.Delay()'实际上使用了一个定时器。 – Andrew
在另一个线程上异步执行,例如。按任务。Delay()肯定是可能的,但OP会询问调用线程中的同步延迟。 –
- 1. Thread.sleep与定时器
- 2. Thread.sleep(时间)与robot.wait(时间)
- 3. Thread.sleep与TimeUnit.SECONDS.sleep
- 4. Thread.sleep vs Monitor.Wait与RegisteredWaitHandle?
- 5. Robot.delay(int)与Thread.sleep(long)
- 6. 的Thread.Sleep与秒表
- 7. Thread.sleep()使用与System.nanoTime相同的时钟()
- 8. LdapConnection超时与SearchRequest超时
- 9. 与超时
- 10. 与超时
- 11. 与超时
- 12. 与超时
- 13. feedparser与超时
- 14. 与fgets()超时
- 15. 与超时
- 16. 超时与DefaultHttpClient
- 17. 与超时
- 18. 超时与Ajaxterm
- 19. 与超时
- 20. Selenium隐式等待与Thread.sleep()
- 21. Thread.Sleep(2500)与Task.Delay(2500).Wait()
- 22. 虽然循环与小Thread.Sleep与Java定时器?
- 23. 运行与超时
- 24. php超时与file_get_html
- 25. Kubectl:Kubernetes与minikube超时
- 26. 调用与超时
- 27. SETNX超时与StackExchange.Redis
- 28. 与jQuery和超时
- 29. 超时:BeginAuthenticateAsClient与AuthenticateAsClient
- 30. 超时与jQuery的
'更好'取决于具体情况。等待基本上是错误的,所以在这里没有“最佳做法”。 –
当我只需要等待时,有什么不好呢?我只是想知道从性能角度来看哪种方法更好,或者如果他们在相同的方式下行事,那么我会根据其他因素(如可读性)来做出我的决定。 –
为什么要创建一个'AutoResetEvent',调用'WaitOne',处理事件,什么时候可以简单地执行'Thread.Sleep'? – Henrik