Task.Delay Método

Definição

Cria uma tarefa que será concluída após um atraso.Creates a task that will complete after a time delay.

Sobrecargas

Delay(TimeSpan, CancellationToken)

Cria uma tarefa cancelável concluída após um intervalo de tempo especificado.Creates a cancellable task that completes after a specified time interval.

Delay(Int32, CancellationToken)

Cria uma tarefa cancelável concluída após um número especificado de milissegundos.Creates a cancellable task that completes after a specified number of milliseconds.

Delay(Int32)

Cria uma tarefa que é concluída após um número especificado de milissegundos.Creates a task that completes after a specified number of milliseconds.

Delay(TimeSpan)

Cria uma tarefa que é concluída após um intervalo de tempo especificado.Creates a task that completes after a specified time interval.

Delay(TimeSpan, CancellationToken)

Cria uma tarefa cancelável concluída após um intervalo de tempo especificado.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

O tempo que se deve aguardar antes de concluir a tarefa retornada ou TimeSpan.FromMilliseconds(-1) para aguardar indefinidamente.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

cancellationToken
CancellationToken

Um token de cancelamento a ser observado ao aguardar a conclusão da tarefa.A cancellation token to observe while waiting for the task to complete.

Retornos

Uma tarefa que representa o atraso.A task that represents the time delay.

Exceções

delay representa um intervalo de tempo negativo diferente de TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

- ou --or- A propriedade TotalMilliseconds do argumento delay é maior do que MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

A tarefa foi cancelada.The task has been canceled.

O cancellationToken fornecido já foi descartado.The provided cancellationToken has already been disposed.

Exemplos

O exemplo a seguir inicia uma tarefa que inclui uma chamada para o método Delay(TimeSpan, CancellationToken) com um atraso de 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 o intervalo de atraso ser decorrido, o token é cancelado.Before the delay interval elapses, the token is cancelled. A saída do exemplo mostra que, como resultado, um TaskCanceledException é gerado e a propriedade ' Status ' das tarefas é definida como 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

Observe que este exemplo inclui uma possível condição de corrida: depende da tarefa de forma assíncrona executando o atraso quando o token é cancelado.Note that this example includes a potential race condition: it depends on the task asynchronously executing the delay when the token is cancelled. Embora o segundo atraso de 1,5 da chamada para o método Delay(TimeSpan, CancellationToken) torne essa suposição provavelmente, é possível que a chamada para o método Delay(TimeSpan, CancellationToken) possa retornar antes que o token seja cancelado.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. Nesse caso, o exemplo produz a seguinte saída:In that case, the example produces the following output:

Task t Status: RanToCompletion, Result: 42  

Comentários

Se o token de cancelamento for sinalizado antes do atraso de tempo especificado, os resultados da exceção TaskCanceledException e a tarefa serão concluídos no estado Canceled.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. Caso contrário, a tarefa será concluída no estado RanToCompletion depois que o atraso de tempo especificado tiver decorrido.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Para cenários de uso e exemplos adicionais, consulte a documentação da sobrecarga Delay(Int32).For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Esse método depende do relógio do sistema.This method depends on the system clock. Isso significa que o atraso será aproximadamente igual à resolução do relógio do sistema se o argumento delay for menor do que a resolução do relógio do sistema, que é de aproximadamente 15 milissegundos em sistemas 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)

Cria uma tarefa cancelável concluída após um número especificado de milissegundos.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

O número de milissegundos para esperar antes de concluir a tarefa retornada ou -1 para aguardar indefinidamente.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

cancellationToken
CancellationToken

Um token de cancelamento a ser observado ao aguardar a conclusão da tarefa.A cancellation token to observe while waiting for the task to complete.

Retornos

Uma tarefa que representa o atraso.A task that represents the time delay.

Exceções

O argumento millisecondsDelay é menor que -1.The millisecondsDelay argument is less than -1.

A tarefa foi cancelada.The task has been canceled.

O cancellationToken fornecido já foi descartado.The provided cancellationToken has already been disposed.

Exemplos

O exemplo a seguir inicia uma tarefa que inclui uma chamada para o método Delay(Int32, CancellationToken) com um atraso de um segundo.The following example launches a task that includes a call to the Delay(Int32, CancellationToken) method with a one second delay. Antes de o intervalo de atraso ser decorrido, o token é cancelado.Before the delay interval elapses, the token is cancelled. A saída do exemplo mostra que, como resultado, um TaskCanceledException é gerado e a propriedade ' Status ' das tarefas é definida como 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

Comentários

Se o token de cancelamento for sinalizado antes do atraso de tempo especificado, os resultados da exceção TaskCanceledException e a tarefa serão concluídos no estado Canceled.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. Caso contrário, a tarefa será concluída no estado RanToCompletion depois que o atraso de tempo especificado tiver decorrido.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Para cenários de uso e exemplos adicionais, consulte a documentação da sobrecarga Delay(Int32).For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Esse método depende do relógio do sistema.This method depends on the system clock. Isso significa que o atraso será aproximadamente igual à resolução do relógio do sistema se o argumento millisecondsDelay for menor do que a resolução do relógio do sistema, que é de aproximadamente 15 milissegundos em sistemas 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)

Cria uma tarefa que é concluída após um número especificado de milissegundos.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

O número de milissegundos para esperar antes de concluir a tarefa retornada ou -1 para aguardar indefinidamente.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

Retornos

Uma tarefa que representa o atraso.A task that represents the time delay.

Exceções

O argumento millisecondsDelay é menor que -1.The millisecondsDelay argument is less than -1.

Exemplos

O exemplo a seguir mostra um uso simples do método Delay.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

Comentários

O método Delay normalmente é usado para atrasar a operação de toda ou parte de uma tarefa para um intervalo de tempo especificado.The Delay method is typically used to delay the operation of all or part of a task for a specified time interval. Normalmente, o atraso de tempo é introduzido:Most commonly, the time delay is introduced:

  • No início da tarefa, como mostra o exemplo a seguir.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
    
  • Um pouco enquanto a tarefa está em execução.Sometime while the task is executing. Nesse caso, a chamada para o método Delay é executada como uma tarefa filho em uma tarefa, como mostra o exemplo a seguir.In this case, the call to the Delay method executes as a child task within a task, as the following example shows. Observe que, como a tarefa que chama o método Delay é executada de forma assíncrona, a tarefa pai deve esperar que ela seja concluída usando a palavra-chave await.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
    

Após o intervalo de tempo especificado, a tarefa é concluída no estado RanToCompletion.After the specified time delay, the task is completed in the RanToCompletion state.

Esse método depende do relógio do sistema.This method depends on the system clock. Isso significa que o atraso será aproximadamente igual à resolução do relógio do sistema se o argumento millisecondsDelay for menor do que a resolução do relógio do sistema, que é de aproximadamente 15 milissegundos em sistemas 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)

Cria uma tarefa que é concluída após um intervalo de tempo 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

O tempo que se deve aguardar antes de concluir a tarefa retornada ou TimeSpan.FromMilliseconds(-1) para aguardar indefinidamente.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

Retornos

Uma tarefa que representa o atraso.A task that represents the time delay.

Exceções

delay representa um intervalo de tempo negativo diferente de TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

- ou --or- A propriedade TotalMilliseconds do argumento delay é maior do que MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

Exemplos

O exemplo a seguir mostra um uso simples do método Delay.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

Comentários

Após o intervalo de tempo especificado, a tarefa é concluída no estado RanToCompletion.After the specified time delay, the task is completed in RanToCompletion state.

Para cenários de uso e exemplos adicionais, consulte a documentação da sobrecarga Delay(Int32).For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Esse método depende do relógio do sistema.This method depends on the system clock. Isso significa que o atraso será aproximadamente igual à resolução do relógio do sistema se o argumento delay for menor do que a resolução do relógio do sistema, que é de aproximadamente 15 milissegundos em sistemas 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.

Aplica-se a