Task.Delay Método

Definición

Crea una tarea que se completará después de un retraso de tiempo.

Sobrecargas

Delay(Int32)

Crea una tarea que se completa después de un número especificado de milisegundos.

Delay(TimeSpan)

Crea una tarea que se completa después de un intervalo de tiempo especificado.

Delay(Int32, CancellationToken)

Crea una tarea cancelable que se completa después de un número especificado de milisegundos.

Delay(TimeSpan, CancellationToken)

Crea una tarea cancelable que se completa después de un intervalo de tiempo especificado.

Delay(TimeSpan, TimeProvider)

Crea una tarea que se completa después de un intervalo de tiempo especificado.

Delay(TimeSpan, TimeProvider, CancellationToken)

Crea una tarea cancelable que se completa después de un intervalo de tiempo especificado.

Delay(Int32)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Crea una tarea que se completa después de un número especificado de milisegundos.

C#
public static System.Threading.Tasks.Task Delay (int millisecondsDelay);

Parámetros

millisecondsDelay
Int32

Número de milisegundos que se deben esperar antes de completar la tarea devuelta o -1 esperar indefinidamente.

Devoluciones

Tarea que representa el retraso de tiempo.

Excepciones

El argumento millisecondsDelay es menor que -1.

Ejemplos

En el ejemplo siguiente se muestra un uso sencillo del método Delay.

C#
using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task.Run(async delegate
              {
                 await Task.Delay(1000);
                 return 42;
              });
      t.Wait();
      Console.WriteLine("Task t Status: {0}, Result: {1}",
                        t.Status, t.Result);
   }
}
// The example displays the following output:
//        Task t Status: RanToCompletion, Result: 42

Comentarios

Normalmente, el método Delay se usa para retrasar la operación de toda o parte de una tarea durante un intervalo de tiempo especificado. Normalmente, se introduce el retraso de tiempo:

  • Al principio de la tarea, como se muestra en el ejemplo siguiente.

    C#
    Stopwatch sw = Stopwatch.StartNew();
    var delay = Task.Delay(1000).ContinueWith(_ =>
                               { sw.Stop();
                                 return sw.ElapsedMilliseconds; } );
    
    Console.WriteLine("Elapsed milliseconds: {0}", delay.Result);
    // The example displays output like the following:
    //        Elapsed milliseconds: 1013
    
  • En algún momento mientras se ejecuta la tarea. En este caso, la llamada al método Delay se ejecuta como una tarea secundaria dentro de una tarea, como se muestra en el ejemplo siguiente. Tenga en cuenta que, dado que la tarea que llama al método Delay se ejecuta de forma asincrónica, la tarea primaria debe esperar a que se complete mediante la palabra clave await.

    C#
    var delay = Task.Run( async () => { Stopwatch sw = Stopwatch.StartNew();
                                        await Task.Delay(2500);
                                        sw.Stop();
                                        return sw.ElapsedMilliseconds; });
    
    Console.WriteLine("Elapsed milliseconds: {0}", delay.Result);
    // The example displays output like the following:
    //        Elapsed milliseconds: 2501
    

Después del retraso de tiempo especificado, la tarea se completa en el estado RanToCompletion.

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

Nota

El reloj del sistema que se usa es el mismo reloj usado por GetTickCount, que no se ve afectado por los cambios realizados con timeBeginPeriod y timeEndPeriod.

Se aplica a

.NET 9 otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Delay(TimeSpan)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Crea una tarea que se completa después de un intervalo de tiempo especificado.

C#
public static System.Threading.Tasks.Task Delay (TimeSpan delay);

Parámetros

delay
TimeSpan

Intervalo de tiempo que se espera antes de completar la tarea devuelta o Timeout.InfiniteTimeSpan esperar indefinidamente.

Devoluciones

Tarea que representa el retraso de tiempo.

Excepciones

delay representa un intervalo de tiempo negativo distinto de Timeout.InfiniteTimeSpan.

-o-

La propiedad del argumento es mayor que 4294967294 en .NET 6 y versiones posteriores, o Int32.MaxValue en todas las versiones anteriores.

Ejemplos

En el ejemplo siguiente se muestra un uso sencillo del método Delay.

C#
using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task.Run(async delegate
              {
                 await Task.Delay(TimeSpan.FromSeconds(1.5));
                 return 42;
              });
      t.Wait();
      Console.WriteLine("Task t Status: {0}, Result: {1}",
                        t.Status, t.Result);
   }
}
// The example displays the following output:
//        Task t Status: RanToCompletion, Result: 42

Comentarios

Después del retraso de tiempo especificado, la tarea se completa en RanToCompletion estado.

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

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

Nota

El reloj del sistema que se usa es el mismo reloj usado por GetTickCount, que no se ve afectado por los cambios realizados con timeBeginPeriod y timeEndPeriod.

Se aplica a

.NET 9 otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Delay(Int32, CancellationToken)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Crea una tarea cancelable que se completa después de un número especificado de milisegundos.

C#
public static System.Threading.Tasks.Task Delay (int millisecondsDelay, System.Threading.CancellationToken cancellationToken);

Parámetros

millisecondsDelay
Int32

Número de milisegundos que se deben esperar antes de completar la tarea devuelta o -1 esperar indefinidamente.

cancellationToken
CancellationToken

Token de cancelación que se debe observar mientras espera a que se complete la tarea.

Devoluciones

Tarea que representa el retraso de tiempo.

Excepciones

El argumento millisecondsDelay es menor que -1.

La tarea se ha cancelado. Esta excepción se almacena en la tarea devuelta.

El cancellationToken proporcionado ya se ha eliminado.

La tarea se ha cancelado.

Ejemplos

En el ejemplo siguiente se inicia una tarea que incluye una llamada al método Delay(Int32, CancellationToken) con un retraso de un segundo. Antes de que transcurre el intervalo de retraso, se cancela el token. La salida del ejemplo muestra que, como resultado, se produce un TaskCanceledException y la propiedad Status de las tareas se establece en Canceled.

C#
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(1000, 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 the following output:
//       TaskCanceledException: A task was canceled.
//       Task t Status: Canceled

Comentarios

Si el token de cancelación se señala antes del retraso de tiempo especificado, se produce una excepción de TaskCanceledException y la tarea se completa en el estado Canceled. De lo contrario, la tarea se completa en el estado RanToCompletion una vez transcurrido el retraso de tiempo especificado.

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

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

Nota

El reloj del sistema que se usa es el mismo reloj usado por GetTickCount, que no se ve afectado por los cambios realizados con timeBeginPeriod y timeEndPeriod.

Se aplica a

.NET 9 otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Delay(TimeSpan, CancellationToken)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Crea una tarea cancelable que se completa después de un intervalo de tiempo especificado.

C#
public static System.Threading.Tasks.Task Delay (TimeSpan delay, System.Threading.CancellationToken cancellationToken);

Parámetros

delay
TimeSpan

Intervalo de tiempo que se espera antes de completar la tarea devuelta o Timeout.InfiniteTimeSpan esperar indefinidamente.

cancellationToken
CancellationToken

Token de cancelación que se debe observar mientras espera a que se complete la tarea.

Devoluciones

Tarea que representa el retraso de tiempo.

Excepciones

delay representa un intervalo de tiempo negativo distinto de Timeout.InfiniteTimeSpan.

-o-

La propiedad del argumento es mayor que 4294967294 en .NET 6 y versiones posteriores, o Int32.MaxValue en todas las versiones anteriores.

La tarea se ha cancelado. Esta excepción se almacena en la tarea devuelta.

El cancellationToken proporcionado ya se ha eliminado.

La tarea se ha cancelado.

Ejemplos

En el ejemplo siguiente se inicia una tarea que incluye una llamada al método Delay(TimeSpan, CancellationToken) con un retraso de 1,5 segundos. Antes de que transcurre el intervalo de retraso, se cancela el token. La salida del ejemplo muestra que, como resultado, se produce un TaskCanceledException y la propiedad Status de las tareas se establece en Canceled.

C#
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

Tenga en cuenta que en este ejemplo se incluye una posible condición de carrera: depende de la tarea que ejecute de forma asincrónica el retraso cuando se cancele el token. Aunque el retraso de 1,5 segundos de la llamada al método Delay(TimeSpan, CancellationToken) hace probable esa suposición, es posible que la llamada al método Delay(TimeSpan, CancellationToken) pueda devolverse antes de que se cancele el token. En ese caso, el ejemplo genera la siguiente salida:

Task t Status: RanToCompletion, Result: 42

Comentarios

Si el token de cancelación se señala antes del retraso de tiempo especificado, se produce una excepción de TaskCanceledException y la tarea se completa en el estado Canceled. De lo contrario, la tarea se completa en el estado RanToCompletion una vez transcurrido el retraso de tiempo especificado.

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

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

Nota

El reloj del sistema que se usa es el mismo reloj usado por GetTickCount, que no se ve afectado por los cambios realizados con timeBeginPeriod y timeEndPeriod.

Se aplica a

.NET 9 otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Delay(TimeSpan, TimeProvider)

Source:
Task.cs
Source:
Task.cs

Crea una tarea que se completa después de un intervalo de tiempo especificado.

C#
public static System.Threading.Tasks.Task Delay (TimeSpan delay, TimeProvider timeProvider);

Parámetros

delay
TimeSpan

El TimeSpan esperar antes de completar la tarea devuelta o InfiniteTimeSpan esperar indefinidamente.

timeProvider
TimeProvider

La TimeProvider con la que interpretar delay.

Devoluciones

Tarea que representa el retraso de tiempo.

Excepciones

delay representa un intervalo de tiempo negativo distinto de InfiniteTimeSpan.

-o-

delaypropiedad TotalMilliseconds es mayor que 4294967294.

El argumento timeProvider es null.

Se aplica a

.NET 9 y .NET 8
Producto Versiones
.NET 8, 9

Delay(TimeSpan, TimeProvider, CancellationToken)

Source:
Task.cs
Source:
Task.cs

Crea una tarea cancelable que se completa después de un intervalo de tiempo especificado.

C#
public static System.Threading.Tasks.Task Delay (TimeSpan delay, TimeProvider timeProvider, System.Threading.CancellationToken cancellationToken);

Parámetros

delay
TimeSpan

El TimeSpan esperar antes de completar la tarea devuelta o InfiniteTimeSpan esperar indefinidamente.

timeProvider
TimeProvider

La TimeProvider con la que interpretar delay.

cancellationToken
CancellationToken

Token de cancelación que se debe observar mientras espera a que se complete la tarea.

Devoluciones

Tarea que representa el retraso de tiempo.

Excepciones

delay representa un intervalo de tiempo negativo distinto de InfiniteTimeSpan.

-o-

delaypropiedad TotalMilliseconds es mayor que 4294967294.

El argumento timeProvider es null.

Se canceló el token de cancelación. Esta excepción se almacena en la tarea devuelta.

Se aplica a

.NET 9 y .NET 8
Producto Versiones
.NET 8, 9