我想要澄清一下。我知道Task.Delay
将在内部使用Timer,它显然是基于任务的(等待),而Thread.Sleep
将导致线程被阻塞。但是,在任务上调用.Wait会导致线程被阻塞吗?
如果没有,可以假设Task.Delay(2500).Wait()
优于Thread.Sleep(2500)
。这与SO question/answer here稍有不同,因为我正在调用.Wait()
。
答案 0 :(得分:11)
在未完成的任务上使用Wait
确实会阻止该线程,直到任务完成。
使用Thread.Sleep
更清楚,因为您明确地阻止了一个线程而不是隐式阻塞任务。
使用Task.Delay
的唯一方法是允许使用CancellationToken
,因此您可以根据需要取消阻止。
答案 1 :(得分:5)
Thread.Sleep(...)
创建一个事件以在X millisec中唤醒你,然后让你的线程处于睡眠状态......在X毫秒中,事件会唤醒你。
Task.Delay(...).Wait()
创建一个事件以在X millisec中启动一个任务,然后让你的线程进入睡眠状态,直到任务完成(等待)...在X毫秒中,事件启动任务,立即结束然后叫醒你。
基本上,它们都非常相似。唯一的区别是如果你想早点从另一个Thread中醒来,你就不会用同样的方法。