Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Task.Delay (TimeSpan, CancellationToken)

.NET Framework (current version)
 

Publicado: noviembre de 2016

Crea una tarea cancelable que se completa después de un intervalo de tiempo específico.

Espacio de nombres:   System.Threading.Tasks
Ensamblado:  mscorlib (en mscorlib.dll)

public static Task Delay(
	TimeSpan delay,
	CancellationToken cancellationToken
)

Parámetros

delay
Type: System.TimeSpan

El intervalo de tiempo que espera antes de completar la tarea devuelta o TimeSpan.FromMilliseconds(-1) para esperar indefinidamente.

cancellationToken
Type: System.Threading.CancellationToken

El token de cancelación que se comprobará antes de completar la tarea devuelta.

Valor devuelto

Type: System.Threading.Tasks.Task

Una tarea que representa el retraso.

Exception Condition
ArgumentOutOfRangeException

delay Representa un intervalo de tiempo negativo distinto de TimeSpan.FromMillseconds(-1).

-o-

El delay del argumento TotalMilliseconds es mayor que la propiedad Int32.MaxValue.

TaskCanceledException

La tarea se canceló.

ObjectDisposedException

Ya se eliminó el cancellationToken proporcionado.

Si el token de cancelación se señala antes el retardo de tiempo especificado, un TaskCanceledException resultados de la excepción y la tarea completada en la TaskStatus.Canceled estado. De lo contrario, se completa la tarea en el TaskStatus.RanToCompletion estado cuando ha transcurrido el intervalo de tiempo especificado.

Para escenarios de uso y ejemplos adicionales, consulte la documentación de la Delay(Int32) de sobrecarga.

Este método depende del reloj del sistema. Esto significa que el tiempo de retardo aproximadamente igual la resolución del reloj del sistema si el delay argumento es menor que la resolución del reloj del sistema, que es aproximadamente 15 milisegundos en los sistemas Windows.

En el ejemplo siguiente se inicia una tarea que incluye una llamada a la Delay(TimeSpan, CancellationToken) método con un retraso de uno y medio segundo. Antes de que transcurra el intervalo de demora, se cancela el token. El resultado del ejemplo muestra que, como resultado, un TaskCanceledException se inicia y las tareas Status propiedad está establecida en TaskStatus.Canceled.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      CancellationTokenSource source = new CancellationTokenSource();

      var t = Task.Run(async delegate
              {
                 await Task.Delay(TimeSpan.FromSeconds(1.5), source.Token);
                 return 42;
              });
      source.Cancel();
      try {
         t.Wait();
      }
      catch (AggregateException ae) {
         foreach (var e in ae.InnerExceptions)
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message);
      }
      Console.Write("Task t Status: {0}", t.Status);
      if (t.Status == TaskStatus.RanToCompletion)
         Console.Write(", Result: {0}", t.Result);
      source.Dispose();
   }
}
// The example displays output like the following:
//       TaskCanceledException: A task was canceled.
//       Task t Status: Canceled

Note that this example includes a potential race condition: it depends on the task asynchronously executing the delay when the token is cancelled. Although the 1.5 second delay from the call to the M:System.Threading.Tasks.Task.Delay(System.TimeSpan,System.Threading.CancellationToken) method makes that assumption likely, it is nevertheless possible that the call to the M:System.Threading.Tasks.Task.Delay(System.TimeSpan,System.Threading.CancellationToken) method could return before the token is cancelled. In that case, the example produces the following output:

Task t Status: RanToCompletion, Result: 42

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 4.5
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: