线程.睡眠(2500)与任务.延迟(2500).等待()

本文关键字:2500 延迟 等待 任务 线程 睡眠 | 更新日期: 2023-09-27 18:25:21

我想弄清楚这一点。我知道Task.Delay将在内部使用Timer,它显然是基于任务的(不可用),而Thread.Sleep将导致线程被阻塞。但是,在任务上调用.Wait是否会导致线程被阻塞?

如果不是,则认为Task.Delay(2500).Wait()Thread.Sleep(2500)好。这与这里的SO问题/答案略有不同,因为我称之为.Wait()

线程.睡眠(2500)与任务.延迟(2500).等待()

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

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

使用Task.Delay的唯一方法是,它允许使用CancellationToken,因此如果您愿意,可以取消块。

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

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

基本上,它们都非常相似。唯一的区别是,如果你想从另一个线程中早点醒来,你不会使用相同的方法。