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

Definizione

Crea un'attività che verrà completata dopo un ritardo di tempo.Creates a task that will complete after a time delay.

Overload

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

Crea un'attività annullabile che viene completata dopo un intervallo di tempo specificato.Creates a cancellable task that completes after a specified time interval.

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

Crea un'attività annullabile che viene completata dopo un numero di millisecondi specificato.Creates a cancellable task that completes after a specified number of milliseconds.

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

Crea un'attività che viene completata dopo un numero di millisecondi specificato.Creates a task that completes after a specified number of milliseconds.

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

Crea un'attività che viene completata dopo un intervallo di tempo specificato.Creates a task that completes after a specified time interval.

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

Crea un'attività annullabile che viene completata dopo un intervallo di tempo specificato.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

Parametri

delay
TimeSpan TimeSpan TimeSpan TimeSpan

Intervallo di tempo da attendere prima del completamento dell'attività restituita oppure TimeSpan.FromMilliseconds(-1) per un'attesa indefinita.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Token di annullamento da osservare durante l'attesa del completamento dell'attività.A cancellation token to observe while waiting for the task to complete.

Restituisce

Attività che rappresenta il ritardo di tempo.A task that represents the time delay.

Eccezioni

delay rappresenta un intervallo di tempo negativo diverso da TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

-oppure--or- La proprietà TotalMilliseconds dell'argomento delay è maggiore di MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

L'attività è stata annullata.The task has been canceled.

Provider cancellationToken già eliminato.The provided cancellationToken has already been disposed.

Esempi

Nell'esempio seguente viene avviata un'attività che include una chiamata al Delay(TimeSpan, CancellationToken) metodo con un ritardo di 1,5 secondi.The following example launches a task that includes a call to the Delay(TimeSpan, CancellationToken) method with a 1.5 second delay. Prima che è trascorso l'intervallo di ritardo, il token viene annullato.Before the delay interval elapses, the token is cancelled. L'output dell'esempio mostra che, di conseguenza, un TaskCanceledException viene generata un'eccezione, nonché delle attività Status è impostata su 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

Si noti che questo esempio include una possibile race condition: dipende l'attività in esecuzione in modo asincrono il ritardo quando viene annullato il token.Note that this example includes a potential race condition: it depends on the task asynchronously executing the delay when the token is cancelled. Sebbene il secondo 1,5 ritardare la chiamata ai Delay(TimeSpan, CancellationToken) metodo effettua questo presupposto probabilmente, tuttavia è possibile che la chiamata al Delay(TimeSpan, CancellationToken) metodo può restituire prima che il token viene annullato.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. In tal caso, l'esempio produce l'output seguente:In that case, the example produces the following output:

Task t Status: RanToCompletion, Result: 42  

Commenti

Se il token di annullamento viene segnalato prima che il ritardo di tempo specificato, un TaskCanceledException dei risultati dell'eccezione e l'attività viene completato nei Canceled dello stato.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. In caso contrario, l'attività viene completato nei RanToCompletion stato una volta trascorso l'intervallo di tempo specificato.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Per gli scenari di utilizzo ed esempi aggiuntivi, vedere la documentazione per il Delay(Int32) rapporto di overload.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Questo metodo dipende dall'orologio di sistema.This method depends on the system clock. Ciò significa che l'intervallo di tempo sarà pari circa la risoluzione del clock di sistema se la delay argomento è minore rispetto alla risoluzione dell'orologio di sistema, è di circa 15 millisecondi nei sistemi 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 un'attività annullabile che viene completata dopo un numero di millisecondi specificato.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

Parametri

millisecondsDelay
Int32 Int32 Int32 Int32

Numero di millisecondi prima del completamento dell'attività restituita oppure -1 per un'attesa indefinita.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Token di annullamento da osservare durante l'attesa del completamento dell'attività.A cancellation token to observe while waiting for the task to complete.

Restituisce

Attività che rappresenta il ritardo di tempo.A task that represents the time delay.

Eccezioni

L'argomento millisecondsDelay è minore di -1.The millisecondsDelay argument is less than -1.

L'attività è stata annullata.The task has been canceled.

Provider cancellationToken già eliminato.The provided cancellationToken has already been disposed.

Esempi

Nell'esempio seguente viene avviata un'attività che include una chiamata al Delay(Int32, CancellationToken) metodo con un secondo di ritardo.The following example launches a task that includes a call to the Delay(Int32, CancellationToken) method with a one second delay. Prima che è trascorso l'intervallo di ritardo, il token viene annullato.Before the delay interval elapses, the token is cancelled. L'output dell'esempio mostra che, di conseguenza, un TaskCanceledException viene generata un'eccezione, nonché delle attività Status è impostata su 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

Commenti

Se il token di annullamento viene segnalato prima che il ritardo di tempo specificato, un TaskCanceledException dei risultati dell'eccezione e l'attività viene completato nei Canceled dello stato.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. In caso contrario, l'attività viene completato nei RanToCompletion stato una volta trascorso l'intervallo di tempo specificato.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Per gli scenari di utilizzo ed esempi aggiuntivi, vedere la documentazione per il Delay(Int32) rapporto di overload.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Questo metodo dipende dall'orologio di sistema.This method depends on the system clock. Ciò significa che l'intervallo di tempo sarà pari circa la risoluzione del clock di sistema se la millisecondsDelay argomento è minore rispetto alla risoluzione dell'orologio di sistema, è di circa 15 millisecondi nei sistemi 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 un'attività che viene completata dopo un numero di millisecondi specificato.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

Parametri

millisecondsDelay
Int32 Int32 Int32 Int32

Numero di millisecondi prima del completamento dell'attività restituita oppure -1 per un'attesa indefinita.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

Restituisce

Attività che rappresenta il ritardo di tempo.A task that represents the time delay.

Eccezioni

L'argomento millisecondsDelay è minore di -1.The millisecondsDelay argument is less than -1.

Esempi

L'esempio seguente illustra un semplice utilizzo di Delay (metodo).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

Commenti

Il Delay metodo viene in genere utilizzato per ritardare l'operazione di tutti o parte di un'attività per un intervallo di tempo specificato.The Delay method is typically used to delay the operation of all or part of a task for a specified time interval. In genere, è stato introdotto il ritardo di tempo:Most commonly, the time delay is introduced:

  • AT Mostra l'inizio dell'attività, come illustrato nell'esempio seguente.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
    
  • Minuto mentre l'attività è in esecuzione.Sometime while the task is executing. In questo caso, la chiamata al Delay metodo viene eseguito come attività figlio all'interno di un'attività, come illustrato nell'esempio seguente.In this case, the call to the Delay method executes as a child task within a task, as the following example shows. Si noti che poiché l'attività che chiama il Delay metodo viene eseguito in modo asincrono, l'attività padre deve attendere il completamento tramite la await (parola chiave).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
    

Dopo il ritardo di tempo specificato, l'attività viene completata nel RanToCompletion dello stato.After the specified time delay, the task is completed in the RanToCompletion state.

Questo metodo dipende dall'orologio di sistema.This method depends on the system clock. Ciò significa che l'intervallo di tempo sarà pari circa la risoluzione del clock di sistema se la millisecondsDelay argomento è minore rispetto alla risoluzione dell'orologio di sistema, è di circa 15 millisecondi nei sistemi 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 un'attività che viene completata dopo un intervallo di tempo specificato.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

Parametri

delay
TimeSpan TimeSpan TimeSpan TimeSpan

Intervallo di tempo da attendere prima del completamento dell'attività restituita oppure TimeSpan.FromMilliseconds(-1) per un'attesa indefinita.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

Restituisce

Attività che rappresenta il ritardo di tempo.A task that represents the time delay.

Eccezioni

delay rappresenta un intervallo di tempo negativo diverso da TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

-oppure--or- La proprietà TotalMilliseconds dell'argomento delay è maggiore di MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

Esempi

L'esempio seguente illustra un semplice utilizzo di Delay (metodo).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

Commenti

Dopo il ritardo di tempo specificato, l'attività viene completata RanToCompletion dello stato.After the specified time delay, the task is completed in RanToCompletion state.

Per gli scenari di utilizzo ed esempi aggiuntivi, vedere la documentazione per il Delay(Int32) rapporto di overload.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Questo metodo dipende dall'orologio di sistema.This method depends on the system clock. Ciò significa che l'intervallo di tempo sarà pari circa la risoluzione del clock di sistema se la delay argomento è minore rispetto alla risoluzione dell'orologio di sistema, è di circa 15 millisecondi nei sistemi 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.

Si applica a