Thread.Sleep() 和 await Task.Delay 之间的真正区别是啥? [复制]

Posted

技术标签:

【中文标题】Thread.Sleep() 和 await Task.Delay 之间的真正区别是啥? [复制]【英文标题】:What's the true difference between Thread.Sleep() and await Task.Delay? [duplicate]Thread.Sleep() 和 await Task.Delay 之间的真正区别是什么? [复制] 【发布时间】:2020-03-04 03:45:38 【问题描述】:

这两种方法都使当前函数休眠,然后继续执行,但它们之间的真正区别是什么? await 将要求方法是异步的,为什么不直接使用 Thread.Sleep 呢?

什么时候不应该使用 Thread.Sleep 而使用 Task.Delay?

【问题讨论】:

【参考方案1】:

Thread.Sleep 将导致操作系统线程暂停,直到计时器结束。

await Task.Delay 将注册一个回调方法,当计时器结束时操作系统将执行该方法。然后该方法将返回一个不完整的Task。允许调用者立即在此 OS 线程上执行其他操作。

【讨论】:

以上是关于Thread.Sleep() 和 await Task.Delay 之间的真正区别是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#中的Task.Delay()和Thread.Sleep()区别

Thread.sleep() 实现

多线程编程里的thread.sleep问题

使用 boost::this_thread::sleep_for() 和常规 sleep() 函数有啥区别?

kernel32.dll Sleep 和 Thread.Sleep() 之间的任何区别

Thread.sleep() 和 Thread.yield() 区别