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 之间的真正区别是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

关于async await的测试

如何使用 async/await 处理同步方法/任务

Java:关于Thread.sleep()

timeunit的sleep和thread的sleep有啥区别

详解.NET 异步编程,如何透过现象,看async/await本质

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