我发现Thread.Sleep()在模拟持久性任务并以优雅的方式取消它们时非常有用(避免使用Thread.Abort()),另一方面,我已经阅读过使用Thread .Sleep()等待其他操作结束是一种不好的做法(我们有Thread.Join()来做)。我想知道在实际的生产代码/情况中是否有Thread.Sleep()的应用程序。
答案 0 :(得分:2)
以下是一些:
Sleep(0)
引发一个上下文切换,产生另一个具有相同或更高优先级的等待线程。答案 1 :(得分:1)
不确定。如果规范说等待5秒,某个地方的某个地方,Sleep(5000)对我有效,例如:
'启动压缩机后,等待五秒钟以使压力稳定,然后再打开燃油阀。
经常被嘲笑的Sleep()调用确实有一些优点。它不涉及运行计时器的其他线程。它适用于所有线程上任何深度的任何调用堆栈。它不需要将现有代码重写为状态机。
OTOH:它常常被误用于轮询线程间标志,而不是使用更合适且更少浪费的线程间信令。睡眠(0)和睡眠(1)循环通常只是浪费时间,CPU和内存带宽。
答案 2 :(得分:0)
这取决于您是否想要或不想阻止该线程。 Thread.Sleep()
将阻止该帖子。
例如,如果您有一个在某处发送请求的线程,但突然连接断开,那么您可以使用Thread.Sleep()
等待一段时间再尝试(这可能是一个瞬态连接错误)
正如我所说,它会阻塞线程,因此线程被冻结,没有其他人可以使用它。
或者,您可以使用await Task.Delay()
并释放该线程,直到给定的超时到期为止。