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; }
基本上,这个方法只是一个包含在任务中的计时器。 所以是的,你可以说它就像计时器。