Thread.Sleep与Task.Delay?

我知道Thread.Sleep阻塞一个线程。

但是, Task.Delay也阻止? 还是它就像Timer使用一个线程的所有callback(当不重叠)?

这个问题不包括差异)

MSDN上的文档是令人失望的,但使用reflection器反编译Task.Delay提供了更多信息:

 public static Task Delay(int millisecondsDelay, CancellationToken cancellationToken) { if (millisecondsDelay < -1) { throw new ArgumentOutOfRangeException("millisecondsDelay", Environment.GetResourceString("Task_Delay_InvalidMillisecondsDelay")); } if (cancellationToken.IsCancellationRequested) { return FromCancellation(cancellationToken); } if (millisecondsDelay == 0) { return CompletedTask; } DelayPromise state = new DelayPromise(cancellationToken); if (cancellationToken.CanBeCanceled) { state.Registration = cancellationToken.InternalRegisterWithoutEC(delegate (object state) { ((DelayPromise) state).Complete(); }, state); } if (millisecondsDelay != -1) { state.Timer = new Timer(delegate (object state) { ((DelayPromise) state).Complete(); }, state, millisecondsDelay, -1); state.Timer.KeepRootedWhileScheduled(); } return state; } 

基本上,这个方法只是一个包含在任务中的计时器。 所以是的,你可以说它就像计时器。