c# multithreading .net-4.0 .net-4.5

c# - Thread.Sleep versus Task.Delay?



multithreading .net-4.0 (1)

La documentación en MSDN es decepcionante, pero descompilar Task.Delay usando Reflector brinda más información:

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; }

Básicamente, este método es solo un temporizador envuelto dentro de una tarea. Entonces sí, puedes decir que es como el cronómetro.

Sé que Thread.Sleep bloquea un hilo.

Pero, ¿ Task.Delay también bloquea? ¿O es solo como Timer que usa un hilo para todas las devoluciones de llamada (cuando no se superpone)?

( this pregunta no cubre las diferencias)