我想要清楚一点.我知道Task.Delay
内部会使用一个Timer,它显然是基于任务的(等待),但Thread.Sleep
会导致线程被阻塞.但是,在任务上调用.Wait会导致线程被阻塞吗?
如果没有,人们会认为这Task.Delay(2500).Wait()
比好Thread.Sleep(2500)
.这跟我所说的SO问题/答案略有不同.Wait()
.
使用Wait
上还未完成的任务,直至任务完成确实阻塞线程.
使用Thread.Sleep
更清楚,因为您明确地阻止了一个线程,而不是隐式阻塞任务.
使用的唯一方法Task.Delay
是允许使用a CancellationToken
,如果你愿意,可以取消阻止.
Thread.Sleep(...)
创建一个事件以在X millisec中唤醒你,然后让你的线程进入睡眠......在X毫秒中,事件唤醒你.
Task.Delay(...).Wait()
创建一个事件以在X millisec中启动一个任务,然后让你的线程进入睡眠状态,直到任务完成(等待)...在X毫秒中,事件启动任务,立即结束,然后唤醒你.
基本上,它们都非常相似.唯一的区别是如果你想从另一个Thread早期醒来,你将不会遇到相同的方法.