我想要弄清楚这一点。我知道Task.Delay将在内部使用计时器,而且它显然是基于任务的(可等待的),而Thread.Sleep将导致线程被阻塞。但是,在任务上调用.Wait会导致线程被阻塞吗?
如果不是,人们会认为Task.Delay(2500).Wait()比Thread.Sleep(2500)更好。这与我调用.Wait()时的SO question/answer here略有不同。
发布于 2015-12-03 04:38:00
在未完成的任务上使用Wait实际上会阻塞线程,直到任务完成。
使用Thread.Sleep更加清晰,因为您显式地阻塞线程,而不是隐式地阻塞任务。
使用Task.Delay的唯一可取方式是,它允许使用CancellationToken,因此如果您愿意,可以取消阻止。
发布于 2015-12-03 04:40:07
Thread.Sleep(...)创建一个事件在X毫秒内唤醒你,然后让你的线程进入睡眠状态……在X毫秒中,该事件将唤醒您。
Task.Delay(...).Wait()在X毫秒内创建一个事件来启动一个任务,然后让你的线程进入睡眠状态,直到任务完成(使用等待)……在X毫秒中,事件启动任务,该任务立即结束,然后唤醒您。
基本上,它们都非常相似。唯一的区别是,如果你想从另一个线程中提早醒来,你不会遇到相同的方法。
https://stackoverflow.com/questions/34052381
复制相似问题