Task.Delay Metoda

Definicja

Tworzy zadanie, które zakończy się po upływie czasu.Creates a task that will complete after a time delay.

Przeciążenia

Delay(Int32, CancellationToken)

Tworzy zadanie anulowania, które kończy się po określonej liczbie milisekund.Creates a cancellable task that completes after a specified number of milliseconds.

Delay(TimeSpan, CancellationToken)

Tworzy zadanie, które kończy się po upływie określonego interwału czasu.Creates a cancellable task that completes after a specified time interval.

Delay(Int32)

Tworzy zadanie, które kończy się po określonej liczbie milisekund.Creates a task that completes after a specified number of milliseconds.

Delay(TimeSpan)

Tworzy zadanie, które kończy się po określonym interwale czasu.Creates a task that completes after a specified time interval.

Delay(Int32, CancellationToken)

Tworzy zadanie anulowania, które kończy się po określonej liczbie milisekund.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
Public Shared Function Delay (millisecondsDelay As Integer, cancellationToken As CancellationToken) As Task

Parametry

millisecondsDelay
Int32

Liczba milisekund oczekiwania przed ukończeniem zwróconego zadania lub wartość-1 w celu oczekiwania na czas nieokreślony.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

cancellationToken
CancellationToken

Token anulowania do obserwowania podczas oczekiwania na ukończenie zadania.A cancellation token to observe while waiting for the task to complete.

Zwraca

Task

Zadanie, które reprezentuje opóźnienie czasu.A task that represents the time delay.

Wyjątki

Wartość millisecondsDelay argumentu jest mniejsza niż-1.The millisecondsDelay argument is less than -1.

Zadanie zostało anulowane.The task has been canceled.

Podane cancellationToken zostało już usunięte.The provided cancellationToken has already been disposed.

Przykłady

Poniższy przykład uruchamia zadanie, które zawiera wywołanie Delay(Int32, CancellationToken) metody z jednym drugim opóźnieniem.The following example launches a task that includes a call to the Delay(Int32, CancellationToken) method with a one second delay. Przed upływem interwału opóźnień token zostanie anulowany.Before the delay interval elapses, the token is cancelled. Dane wyjściowe z przykładu pokazują, że w wyniku zgłoszenia TaskCanceledException jest generowany i Właściwość Tasks Status jest ustawiona na 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

Uwagi

Jeśli token anulowania jest zasygnalizowane przed określonym opóźnieniem, TaskCanceledException wynik wyjątku, a zadanie zostanie ukończone w Canceled stanie.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. W przeciwnym razie zadanie zostanie ukończone w RanToCompletion stanie po upływie określonego czasu.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Scenariusze użycia i dodatkowe przykłady można znaleźć w dokumentacji Delay(Int32) przeciążenia.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Ta metoda zależy od zegara systemowego.This method depends on the system clock. Oznacza to, że opóźnienie będzie w przybliżeniu równe rozdzielczości zegara systemowego millisecondsDelay , jeśli argument jest krótszy niż rozdzielczość zegara systemowego, czyli około 15 milisekund w systemach 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.

Dotyczy

Delay(TimeSpan, CancellationToken)

Tworzy zadanie, które kończy się po upływie określonego interwału czasu.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
Public Shared Function Delay (delay As TimeSpan, cancellationToken As CancellationToken) As Task

Parametry

delay
TimeSpan

Przedział czasu oczekiwania przed ukończeniem zwróconego zadania lub TimeSpan.FromMilliseconds(-1) oczekiwania na czas nieokreślony.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

cancellationToken
CancellationToken

Token anulowania do obserwowania podczas oczekiwania na ukończenie zadania.A cancellation token to observe while waiting for the task to complete.

Zwraca

Task

Zadanie, które reprezentuje opóźnienie czasu.A task that represents the time delay.

Wyjątki

delay reprezentuje ujemny przedział czasu inny niż TimeSpan.FromMilliseconds(-1) .delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

-lub--or- delay TotalMilliseconds Właściwość argumentu jest większa niż MaxValue .The delay argument's TotalMilliseconds property is greater than MaxValue.

Zadanie zostało anulowane.The task has been canceled.

Podane cancellationToken zostało już usunięte.The provided cancellationToken has already been disposed.

Przykłady

Poniższy przykład uruchamia zadanie, które zawiera wywołanie Delay(TimeSpan, CancellationToken) metody z 1,5 drugim opóźnieniem.The following example launches a task that includes a call to the Delay(TimeSpan, CancellationToken) method with a 1.5 second delay. Przed upływem interwału opóźnień token zostanie anulowany.Before the delay interval elapses, the token is cancelled. Dane wyjściowe z przykładu pokazują, że w wyniku zgłoszenia TaskCanceledException jest generowany i Właściwość Tasks Status jest ustawiona na 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

Należy zauważyć, że ten przykład zawiera potencjalne sytuacje wyścigu: zależy od zadania asynchronicznego wykonywania opóźnień po anulowaniu tokenu.Note that this example includes a potential race condition: it depends on the task asynchronously executing the delay when the token is cancelled. Mimo że opóźnienie w 1,5 sekund od wywołania Delay(TimeSpan, CancellationToken) metody sprawia, że założenie to prawdopodobnie, istnieje jednak możliwość Delay(TimeSpan, CancellationToken) zwrócenia wywołania metody przed anulowaniem tokenu.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. W takim przypadku przykład generuje następujące dane wyjściowe:In that case, the example produces the following output:

Task t Status: RanToCompletion, Result: 42  

Uwagi

Jeśli token anulowania jest zasygnalizowane przed określonym opóźnieniem, TaskCanceledException wynik wyjątku, a zadanie zostanie ukończone w Canceled stanie.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. W przeciwnym razie zadanie zostanie ukończone w RanToCompletion stanie po upływie określonego czasu.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Scenariusze użycia i dodatkowe przykłady można znaleźć w dokumentacji Delay(Int32) przeciążenia.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Ta metoda zależy od zegara systemowego.This method depends on the system clock. Oznacza to, że opóźnienie będzie w przybliżeniu równe rozdzielczości zegara systemowego delay , jeśli argument jest krótszy niż rozdzielczość zegara systemowego, czyli około 15 milisekund w systemach 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.

Dotyczy

Delay(Int32)

Tworzy zadanie, które kończy się po określonej liczbie milisekund.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

Parametry

millisecondsDelay
Int32

Liczba milisekund oczekiwania przed ukończeniem zwróconego zadania lub wartość-1 w celu oczekiwania na czas nieokreślony.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

Zwraca

Task

Zadanie, które reprezentuje opóźnienie czasu.A task that represents the time delay.

Wyjątki

Wartość millisecondsDelay argumentu jest mniejsza niż-1.The millisecondsDelay argument is less than -1.

Przykłady

W poniższym przykładzie pokazano proste użycie Delay metody.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

Uwagi

DelayMetoda jest zwykle używana do opóźniania operacji wszystkich lub części zadania przez określony przedział czasu.The Delay method is typically used to delay the operation of all or part of a task for a specified time interval. Najczęściej jest wprowadzana wartość opóźnienia:Most commonly, the time delay is introduced:

  • Na początku zadania, jak pokazano w poniższym przykładzie.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
    
  • W czasie wykonywania zadania.Sometime while the task is executing. W takim przypadku wywołanie Delay metody jest wykonywane jako zadanie podrzędne w ramach zadania, jak pokazano w poniższym przykładzie.In this case, the call to the Delay method executes as a child task within a task, as the following example shows. Należy zauważyć, że ponieważ zadanie wywołujące Delay metodę jest wykonywane asynchronicznie, zadanie nadrzędne musi oczekiwać na jego zakończenie przy użyciu await słowa kluczowego.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
    

Po upływie określonego czasu zadanie zostanie wykonane w RanToCompletion stanie.After the specified time delay, the task is completed in the RanToCompletion state.

Ta metoda zależy od zegara systemowego.This method depends on the system clock. Oznacza to, że opóźnienie będzie w przybliżeniu równe rozdzielczości zegara systemowego millisecondsDelay , jeśli argument jest krótszy niż rozdzielczość zegara systemowego, czyli około 15 milisekund w systemach 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.

Dotyczy

Delay(TimeSpan)

Tworzy zadanie, które kończy się po określonym interwale czasu.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

Parametry

delay
TimeSpan

Przedział czasu oczekiwania przed ukończeniem zwróconego zadania lub TimeSpan.FromMilliseconds(-1) oczekiwania na czas nieokreślony.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

Zwraca

Task

Zadanie, które reprezentuje opóźnienie czasu.A task that represents the time delay.

Wyjątki

delay reprezentuje ujemny przedział czasu inny niż TimeSpan.FromMilliseconds(-1) .delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

-lub--or- delay TotalMilliseconds Właściwość argumentu jest większa niż MaxValue .The delay argument's TotalMilliseconds property is greater than MaxValue.

Przykłady

W poniższym przykładzie pokazano proste użycie Delay metody.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

Uwagi

Po upływie określonego czasu zadanie zostanie ukończone w RanToCompletion stanie.After the specified time delay, the task is completed in RanToCompletion state.

Scenariusze użycia i dodatkowe przykłady można znaleźć w dokumentacji Delay(Int32) przeciążenia.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Ta metoda zależy od zegara systemowego.This method depends on the system clock. Oznacza to, że opóźnienie będzie w przybliżeniu równe rozdzielczości zegara systemowego delay , jeśli argument jest krótszy niż rozdzielczość zegara systemowego, czyli około 15 milisekund w systemach 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.

Dotyczy