Open utterances-bot opened 4 years ago
请问,最后“另外,如果等待时使用 Task.Delay 而不是 Thread.Sleep,那么你可以节省一个线程的资源”这句话如何理解? 这句话是跟随上一句使用async/await的吧,也就是说使用await Task.Delay而不是Thread.Sleep。 await Task.Delay是内部开启了一个新线程然后等待了X毫秒吗?然后调用线程可以继续工作。这样是总共两个线程,分别不耽误工作。 Thread.Sleep堵塞了当前线程,但也没有开启第二个线程。 所以,如何理解节省了一个线程的资源?还是我哪里理解的有误,麻烦指导。
@KuHai-A 可能我这段话的描述缺少了一个前提条件——对于一般产品/项目来说。
Task.Delay
的等待是共用了一个计时的线程,而这个线程在统一管理的现成池中。Thread.Sleep
没有使用任何现成的线程资源,而是直接将当前线程阻塞。
基于以上三点,Thread.Sleep
会阻塞当前线程,而 Task.Delay
因为在一般项目中复用了现有的线程从而节省了资源。@walterlv 谢谢耐心解答,这下理解了
C#/.NET 中 Thread.Sleep(0), Task.Delay(0), Thread.Yield(), Task.Yield() 不同的执行效果和用法建议 - walterlv
C#/.NET 中 Thread.Sleep(0), Task.Delay(0), Thread.Yield(), Task.Yield() 不同的执行效果和用法建议
https://blog.walterlv.com/post/sleep-delay-zero-vs-yield.html