Thread.Sleep(2500)与Task.Delay(2500).Wait()

我想要澄清一下。 我知道Task.Delay将在内部使用Timer,它显然是基于任务的(等待),而Thread.Sleep将导致线程被阻止。 但是,在任务上调用.Wait会导致线程被阻塞吗?

如果没有,可以假设Task.Delay(2500).Wait()优于Thread.Sleep(2500) 。 这与我正在调用的SO问题/答案略有不同.Wait()

对未完成的任务使用Wait确实会阻塞该线程,直到任务完成。

使用Thread.Sleep更清楚,因为您明确地阻塞了一个线程而不是隐式阻塞任务。

使用Task.Delay的唯一方法是允许使用CancellationToken以便您可以根据需要取消阻止。

Thread.Sleep(...)创建一个事件以在X millisec中唤醒你,然后让你的线程进入睡眠……在X毫秒中,事件唤醒你。

Task.Delay(...).Wait()创建一个事件来启动X millisec中的Task,然后让你的线程进入睡眠状态,直到任务完成(等待)…在X millisec中,事件启动任务它会立即结束,然后唤醒你。

基本上,它们都非常相似。 唯一的区别是如果你想从另一个Thread早期醒来,你将不会遇到相同的方法。