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

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

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

如果不是,人们会认为 Task.Delay(2500).Wait() 优于 Thread.Sleep(2500)。这与我调用的 SO question/answer here .Wait().

略有不同

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

使用 Thread.Sleep 更清晰,因为您是显式阻塞线程而不是隐式阻塞任务。

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

Thread.Sleep(...) 创建一个事件以在 X 毫秒内唤醒您,然后让您的线程进入睡眠状态...在 X 毫秒内,该事件将您唤醒。

Task.Delay(...).Wait() 创建一个事件以在 X 毫秒内启动任务,然后让您的线程进入睡眠状态直到任务完成(等待)...在 X 毫秒内,事件启动任务并结束立即唤醒你。

基本上,它们都非常相似。唯一不同的是,如果你想从另一个线程中早起,你不会打同样的方法。