线程.睡眠(2500)与任务.延迟(2500).等待()
本文关键字:2500 延迟 等待 任务 线程 睡眠 | 更新日期: 2023-09-27 18:25:21
我想弄清楚这一点。我知道Task.Delay
将在内部使用Timer,它显然是基于任务的(不可用),而Thread.Sleep
将导致线程被阻塞。但是,在任务上调用.Wait
是否会导致线程被阻塞?
如果不是,则认为Task.Delay(2500).Wait()
比Thread.Sleep(2500)
好。这与这里的SO问题/答案略有不同,因为我称之为.Wait()
。
在未完成的任务上使用Wait
确实会阻塞线程,直到任务完成。
使用Thread.Sleep
更清楚,因为您显式地阻塞线程,而不是隐式地阻塞任务。
使用Task.Delay
的唯一方法是,它允许使用CancellationToken
,因此如果您愿意,可以取消块。
Thread.Sleep(...)
创建一个事件,在X毫秒内唤醒您,然后使线程进入睡眠状态。。。在X毫秒内,该事件将唤醒您。
Task.Delay(...).Wait()
创建一个事件以在X毫秒内启动任务,然后使线程进入睡眠状态,直到任务完成(使用"等待")。。。在X毫秒内,事件启动任务,任务立即结束,然后唤醒您。
基本上,它们都非常相似。唯一的区别是,如果你想从另一个线程中早点醒来,你不会使用相同的方法。