Task.Delay Task.Delay Task.Delay Task.Delay Method

Definición

Crea una tarea que se completará después de un retardo.Creates a task that will complete after a time delay.

Sobrecargas

Delay(TimeSpan, CancellationToken) Delay(TimeSpan, CancellationToken) Delay(TimeSpan, CancellationToken)

Crea una tarea cancelable que se completa después de un intervalo de tiempo específico.Creates a cancellable task that completes after a specified time interval.

Delay(Int32, CancellationToken) Delay(Int32, CancellationToken) Delay(Int32, CancellationToken)

Crea una tarea cancelable que se completa después de un número especificado de milisegundos.Creates a cancellable task that completes after a specified number of milliseconds.

Delay(Int32) Delay(Int32) Delay(Int32) Delay(Int32)

Crea una tarea que se completa después de un número especificado de milisegundos.Creates a task that completes after a specified number of milliseconds.

Delay(TimeSpan) Delay(TimeSpan) Delay(TimeSpan) Delay(TimeSpan)

Crea una tarea que se completa después de un intervalo de tiempo especificado.Creates a task that completes after a specified time interval.

Delay(TimeSpan, CancellationToken) Delay(TimeSpan, CancellationToken) Delay(TimeSpan, CancellationToken)

Crea una tarea cancelable que se completa después de un intervalo de tiempo específico.Creates a cancellable task that completes after a specified time interval.

public:
 static System::Threading::Tasks::Task ^ Delay(TimeSpan delay, System::Threading::CancellationToken cancellationToken);
public static System.Threading.Tasks.Task Delay (TimeSpan delay, System.Threading.CancellationToken cancellationToken);
static member Delay : TimeSpan * System.Threading.CancellationToken -> System.Threading.Tasks.Task

Parámetros

delay
TimeSpan TimeSpan TimeSpan TimeSpan

El intervalo de tiempo que espera antes de completar la tarea devuelta o TimeSpan.FromMilliseconds(-1) para esperar indefinidamente.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Un token de cancelación que se observará mientras se espera a que se complete la tarea.A cancellation token to observe while waiting for the task to complete.

Devoluciones

Una tarea que representa el retraso.A task that represents the time delay.

Excepciones

delay representa un intervalo de tiempo negativo distinto de TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

O bien-or- La propiedad TotalMilliseconds del argumento delay es mayor que MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

El cancellationToken proporcionado ya se ha eliminado.The provided cancellationToken has already been disposed.

Ejemplos

El ejemplo siguiente inicia una tarea que incluye una llamada a la Delay(TimeSpan, CancellationToken) método con un retraso 1,5 segundos.The following example launches a task that includes a call to the Delay(TimeSpan, CancellationToken) method with a 1.5 second delay. Antes de que transcurra el intervalo de retraso, se cancela el token.Before the delay interval elapses, the token is cancelled. El resultado del ejemplo muestra que, como resultado, un TaskCanceledException se inicia y las tareas Status propiedad está establecida en Canceled.The output from the example shows that, as a result, a TaskCanceledException is thrown, and the tasks' Status property is set to 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
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim source As New CancellationTokenSource()
      
      Dim t = Task.Run(Async Function()
                                Await Task.Delay(TimeSpan.FromSeconds(1.5),
                                                 source.Token)
                                Return 42
                       End Function)
      source.Cancel()
      Try
         t.Wait()
      Catch ae As AggregateException
         For Each e In ae.InnerExceptions
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message)
         Next
      End Try
      Console.Write("Task t Status: {0}", t.Status)
      If t.Status = TaskStatus.RanToCompletion Then
         Console.Write(", Result: {0}", t.Result)
      End If
      source.Dispose()
   End Sub
End Module
' The example displays output like the following:
'       TaskCanceledException: A task was canceled.
'       Task t Status: Canceled

Tenga en cuenta que este ejemplo incluye una condición de carrera potenciales: depende de la tarea ejecutando de forma asincrónica el retraso cuando se cancela el token.Note that this example includes a potential race condition: it depends on the task asynchronously executing the delay when the token is cancelled. Aunque el segundo 1,5 retraso de la llamada a la Delay(TimeSpan, CancellationToken) método realiza esa suposición probable, sin embargo, es posible que la llamada a la Delay(TimeSpan, CancellationToken) podría devolver el método antes de que se cancela el token.Although the 1.5 second delay from the call to the Delay(TimeSpan, CancellationToken) method makes that assumption likely, it is nevertheless possible that the call to the Delay(TimeSpan, CancellationToken) method could return before the token is cancelled. En ese caso, el ejemplo produce el siguiente resultado:In that case, the example produces the following output:

Task t Status: RanToCompletion, Result: 42  

Comentarios

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 se completa en el Canceled estado.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. En caso contrario, se completa la tarea en el RanToCompletion estado una vez que haya transcurrido el intervalo de tiempo especificado.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Para escenarios de uso y ejemplos adicionales, consulte la documentación de la Delay(Int32) de sobrecarga.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Este método depende del reloj del sistema.This method depends on the system clock. Esto significa que el tiempo de retardo aproximado será igual a la resolución del reloj del sistema si el delay argumento es menor que la resolución del reloj del sistema, que es aproximadamente de 15 milisegundos en los sistemas de Windows.This means that the time delay will approximately equal the resolution of the system clock if the delay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Delay(Int32, CancellationToken) Delay(Int32, CancellationToken) Delay(Int32, CancellationToken)

Crea una tarea cancelable que se completa después de un número especificado de milisegundos.Creates a cancellable task that completes after a specified number of milliseconds.

public:
 static System::Threading::Tasks::Task ^ Delay(int millisecondsDelay, System::Threading::CancellationToken cancellationToken);
public static System.Threading.Tasks.Task Delay (int millisecondsDelay, System.Threading.CancellationToken cancellationToken);
static member Delay : int * System.Threading.CancellationToken -> System.Threading.Tasks.Task

Parámetros

millisecondsDelay
Int32 Int32 Int32 Int32

El número de milisegundos que se esperará antes de completar la tarea devuelta o -1 para esperar indefinidamente.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Un token de cancelación que se observará mientras se espera a que se complete la tarea.A cancellation token to observe while waiting for the task to complete.

Devoluciones

Una tarea que representa el retraso.A task that represents the time delay.

Excepciones

El argumento millisecondsDelay es menor que -1.The millisecondsDelay argument is less than -1.

El cancellationToken proporcionado ya se ha eliminado.The provided cancellationToken has already been disposed.

Ejemplos

El ejemplo siguiente inicia una tarea que incluye una llamada a la Delay(Int32, CancellationToken) método con un un retraso segundo.The following example launches a task that includes a call to the Delay(Int32, CancellationToken) method with a one second delay. Antes de que transcurra el intervalo de retraso, se cancela el token.Before the delay interval elapses, the token is cancelled. El resultado del ejemplo muestra que, como resultado, un TaskCanceledException se inicia y las tareas Status propiedad está establecida en Canceled.The output from the example shows that, as a result, a TaskCanceledException is thrown, and the tasks' Status property is set to 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(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
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim source As New CancellationTokenSource()
      
      Dim t = Task.Run(Async Function()
                                Await Task.Delay(1000, source.Token)
                                Return 42
                       End Function)
      source.Cancel()
      Try
         t.Wait()
      Catch ae As AggregateException
         For Each e In ae.InnerExceptions
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message)
         Next
      End Try
      Console.Write("Task t Status: {0}", t.Status)
      If t.Status = TaskStatus.RanToCompletion Then
         Console.Write(", Result: {0}", t.Result)
      End If
      source.Dispose()
   End Sub
End Module
' 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 el retardo de tiempo especificado, un TaskCanceledException resultados de la excepción y la tarea se completa en el Canceled estado.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. En caso contrario, se completa la tarea en el RanToCompletion estado una vez que haya transcurrido el intervalo de tiempo especificado.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Para escenarios de uso y ejemplos adicionales, consulte la documentación de la Delay(Int32) de sobrecarga.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Este método depende del reloj del sistema.This method depends on the system clock. Esto significa que el tiempo de retardo aproximado será igual a la resolución del reloj del sistema si el millisecondsDelay argumento es menor que la resolución del reloj del sistema, que es aproximadamente de 15 milisegundos en los sistemas de Windows.This means that the time delay will approximately equal the resolution of the system clock if the millisecondsDelay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Delay(Int32) Delay(Int32) Delay(Int32) Delay(Int32)

Crea una tarea que se completa después de un número especificado de milisegundos.Creates a task that completes after a specified number of milliseconds.

public:
 static System::Threading::Tasks::Task ^ Delay(int millisecondsDelay);
public static System.Threading.Tasks.Task Delay (int millisecondsDelay);
static member Delay : int -> System.Threading.Tasks.Task
Public Shared Function Delay (millisecondsDelay As Integer) As Task

Parámetros

millisecondsDelay
Int32 Int32 Int32 Int32

El número de milisegundos que se esperará antes de completar la tarea devuelta o -1 para esperar indefinidamente.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

Devoluciones

Una tarea que representa el retraso.A task that represents the time delay.

Excepciones

El argumento millisecondsDelay es menor que -1.The millisecondsDelay argument is less than -1.

Ejemplos

El ejemplo siguiente muestra un uso simple de la Delay método.The following example shows a simple use of the Delay method.

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
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t = Task.Run(Async Function()
                                Await Task.Delay(1000)
                                Return 42
                       End Function)
      t.Wait()
      Console.WriteLine("Task t Status: {0}, Result: {1}",
                        t.Status, t.Result)
   End Sub
End Module
' The example displays the following output:
'       Task t Status: RanToCompletion, Result: 42

Comentarios

El Delay método se utiliza normalmente para retrasar la operación de todo o parte de una tarea para un intervalo de tiempo especificado.The Delay method is typically used to delay the operation of all or part of a task for a specified time interval. Normalmente, se introduce el retardo de tiempo:Most commonly, the time delay is introduced:

  • En el principio de la tarea, como en el ejemplo siguiente se muestra.At the beginning of the task, as the following example shows.

    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
    
    Dim sw As Stopwatch = Stopwatch.StartNew()
    Dim delay1 = Task.Delay(1000)
    Dim delay2 = delay1.ContinueWith( Function(antecedent)
                            sw.Stop()
                            Return sw.ElapsedMilliseconds
                          End Function)
    
    Console.WriteLine("Elapsed milliseconds: {0}", delay2.Result)
    ' The example displays output like the following:
    '        Elapsed milliseconds: 1013
    
  • En algún momento mientras se está ejecutando la tarea.Sometime while the task is executing. En este caso, la llamada a la Delay método se ejecuta como una tarea secundaria dentro de una tarea, como se muestra en el ejemplo siguiente.In this case, the call to the Delay method executes as a child task within a task, as the following example shows. Tenga en cuenta que desde la tarea que llama el Delay método se ejecuta de forma asincrónica, la tarea primaria debe esperar a que finalice mediante el uso de la await palabra clave.Note that since the task that calls the Delay method executes asynchronously, the parent task must wait for it to complete by using the await keyword.

    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
    
    Dim delay = Task.Run( Async Function()
                             Dim sw As Stopwatch = Stopwatch.StartNew()
                             Await Task.Delay(2500)
                             sw.Stop()
                             Return sw.ElapsedMilliseconds
                          End Function )
    
    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 RanToCompletion estado.After the specified time delay, the task is completed in the RanToCompletion state.

Este método depende del reloj del sistema.This method depends on the system clock. Esto significa que el tiempo de retardo aproximado será igual a la resolución del reloj del sistema si el millisecondsDelay argumento es menor que la resolución del reloj del sistema, que es aproximadamente de 15 milisegundos en los sistemas de Windows.This means that the time delay will approximately equal the resolution of the system clock if the millisecondsDelay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Delay(TimeSpan) Delay(TimeSpan) Delay(TimeSpan) Delay(TimeSpan)

Crea una tarea que se completa después de un intervalo de tiempo especificado.Creates a task that completes after a specified time interval.

public:
 static System::Threading::Tasks::Task ^ Delay(TimeSpan delay);
public static System.Threading.Tasks.Task Delay (TimeSpan delay);
static member Delay : TimeSpan -> System.Threading.Tasks.Task
Public Shared Function Delay (delay As TimeSpan) As Task

Parámetros

delay
TimeSpan TimeSpan TimeSpan TimeSpan

El intervalo de tiempo que espera antes de completar la tarea devuelta o TimeSpan.FromMilliseconds(-1) para esperar indefinidamente.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

Devoluciones

Una tarea que representa el retraso.A task that represents the time delay.

Excepciones

delay representa un intervalo de tiempo negativo distinto de TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

O bien-or- La propiedad TotalMilliseconds del argumento delay es mayor que MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

Ejemplos

El ejemplo siguiente muestra un uso simple de la Delay método.The following example shows a simple use of the Delay method.

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
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t = Task.Run(Async Function()
                                Await Task.Delay(TimeSpan.FromSeconds(1.5))
                                Return 42
                       End Function)
      t.Wait()
      Console.WriteLine("Task t Status: {0}, Result: {1}",
                        t.Status, t.Result)
   End Sub
End Module
' The example displays the following output:
'       Task t Status: RanToCompletion, Result: 42

Comentarios

Después del retraso de tiempo especificado, la tarea completada en RanToCompletion estado.After the specified time delay, the task is completed in RanToCompletion state.

Para escenarios de uso y ejemplos adicionales, consulte la documentación de la Delay(Int32) de sobrecarga.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Este método depende del reloj del sistema.This method depends on the system clock. Esto significa que el tiempo de retardo aproximado será igual a la resolución del reloj del sistema si el delay argumento es menor que la resolución del reloj del sistema, que es aproximadamente de 15 milisegundos en los sistemas de Windows.This means that the time delay will approximately equal the resolution of the system clock if the delay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Se aplica a