Task.Delay Methode

Definition

Erstellt eine Aufgabe, die nach einer Verzögerung abgeschlossen wird.

Überlädt

Delay(Int32)

Erstellt eine Aufgabe, die nach Ablauf einer festgelegten Anzahl an Millisekunden abgeschlossen wird.

Delay(TimeSpan)

Erstellt eine Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird.

Delay(Int32, CancellationToken)

Erstellt eine stornierbare Aufgabe, die nach Ablauf einer festgelegten Anzahl an Millisekunden abgeschlossen wird.

Delay(TimeSpan, CancellationToken)

Erstellt eine abzubrechende Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird.

Delay(Int32)

Erstellt eine Aufgabe, die nach Ablauf einer festgelegten Anzahl an Millisekunden abgeschlossen wird.

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

Parameter

millisecondsDelay
Int32

Die Anzahl von Millisekunden, die gewartet wird, bevor die zurückgegebene Aufgabe abgeschlossen wird, oder -1, um unbegrenzt zu warten.

Gibt zurück

Task

Eine Aufgabe, die die Verzögerung darstellt.

Ausnahmen

Das millisecondsDelay-Argument ist kleiner als -1.

Beispiele

Das folgende Beispiel zeigt eine einfache Verwendung der Delay Methode.

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

Hinweise

Die Delay Methode wird in der Regel verwendet, um den Vorgang aller oder eines Teils eines Vorgangs für ein bestimmtes Zeitintervall zu verzögern. Am häufigsten wird die Zeitverzögerung eingeführt:

  • Am Anfang der Aufgabe wird gezeigt, wie im folgenden Beispiel gezeigt.

    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
    
  • Einige Zeit, während die Aufgabe ausgeführt wird. In diesem Fall wird der Aufruf der Delay Methode als untergeordnete Aufgabe innerhalb einer Aufgabe ausgeführt, wie das folgende Beispiel zeigt. Beachten Sie, dass der Vorgang, der die Delay Methode aufruft, asynchron ausgeführt wird, die übergeordnete Aufgabe warten muss, bis sie mit dem await Schlüsselwort abgeschlossen wird.

    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
    

Nach der angegebenen Zeitverzögerung wird der Vorgang im RanToCompletion Zustand abgeschlossen.

Diese Methode hängt von der Systemuhr ab. Dies bedeutet, dass die Zeitverzögerung ungefähr der Auflösung der Systemuhr entspricht, wenn das millisecondsDelay Argument kleiner als die Auflösung der Systemuhr ist, die etwa 15 Millisekunden auf Windows Systemen beträgt.

Hinweis

Die verwendete Systemuhr ist dieselbe Uhr, die von GetTickCount verwendet wird, die nicht von Änderungen betroffen ist, die mit timeBeginPeriod und timeEndPeriod vorgenommen wurden.

Gilt für:

Delay(TimeSpan)

Erstellt eine Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird.

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

Parameter

delay
TimeSpan

Die Zeitspanne, die abgewartet werden soll, bevor die zurückgegebene Aufgabe abgeschlossen wird, oder TimeSpan.FromMilliseconds(-1), um unbegrenzt zu warten.

Gibt zurück

Task

Eine Aufgabe, die die Verzögerung darstellt.

Ausnahmen

delay stellt ein negatives Zeitintervall ungleich TimeSpan.FromMilliseconds(-1) dar.

- oder - Die delay Eigenschaft des TotalMilliseconds Arguments ist größer als 4294967294 für .NET 6 und höher, oder Int32.MaxValue für alle vorherigen Versionen.

Beispiele

Das folgende Beispiel zeigt eine einfache Verwendung der Delay Methode.

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

Hinweise

Nach der angegebenen Zeitverzögerung wird der Vorgang im RanToCompletion Zustand abgeschlossen.

Weitere Beispiele finden Sie in der Dokumentation für die Delay(Int32) Überladung.

Diese Methode hängt von der Systemuhr ab. Dies bedeutet, dass die Zeitverzögerung ungefähr der Auflösung der Systemuhr entspricht, wenn das delay Argument kleiner als die Auflösung der Systemuhr ist, die etwa 15 Millisekunden auf Windows Systemen beträgt.

Hinweis

Die verwendete Systemuhr ist dieselbe Uhr, die von GetTickCount verwendet wird, die nicht von Änderungen betroffen ist, die mit timeBeginPeriod und timeEndPeriod vorgenommen wurden.

Gilt für:

Delay(Int32, CancellationToken)

Erstellt eine stornierbare Aufgabe, die nach Ablauf einer festgelegten Anzahl an Millisekunden abgeschlossen wird.

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

Parameter

millisecondsDelay
Int32

Die Anzahl der Millisekunden, die gewartet wird, bevor die zurückgegebene Aufgabe abgeschlossen wird, oder -1, um unbegrenzt zu warten.

cancellationToken
CancellationToken

Ein Abbruchtoken, das beim Warten auf den Abschluss der Aufgabe überwacht werden soll.

Gibt zurück

Task

Eine Aufgabe, die die Verzögerung darstellt.

Ausnahmen

Das millisecondsDelay-Argument ist kleiner als -1.

Die Aufgabe wurde abgebrochen.

Das angegebene cancellationToken wurde bereits verworfen.

Beispiele

Im folgenden Beispiel wird eine Aufgabe gestartet, die einen Aufruf der Delay(Int32, CancellationToken) Methode mit einer zweiten Verzögerung enthält. Bevor das Verzögerungsintervall abgelaufen ist, wird das Token abgebrochen. Die Ausgabe aus dem Beispiel zeigt, dass daher eine TaskCanceledException ausgelöst wird, und die Eigenschaft der Aufgaben Status wird auf Canceledfestgelegt.

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

Hinweise

Wenn das Abbruchtoken vor der angegebenen Zeitverzögerung signalisiert wird, wird eine TaskCanceledException Ausnahme erzielt, und die Aufgabe wird im Canceled Zustand abgeschlossen. Andernfalls wird der Vorgang im RanToCompletion Zustand abgeschlossen, nachdem die angegebene Zeitverzögerung abgelaufen ist.

Weitere Beispiele finden Sie in der Dokumentation für die Delay(Int32) Überladung.

Diese Methode hängt von der Systemuhr ab. Dies bedeutet, dass die Zeitverzögerung ungefähr der Auflösung der Systemuhr entspricht, wenn das millisecondsDelay Argument kleiner als die Auflösung der Systemuhr ist, die etwa 15 Millisekunden auf Windows Systemen beträgt.

Hinweis

Die verwendete Systemuhr ist dieselbe Uhr, die von GetTickCount verwendet wird, die nicht von Änderungen betroffen ist, die mit timeBeginPeriod und timeEndPeriod vorgenommen wurden.

Gilt für:

Delay(TimeSpan, CancellationToken)

Erstellt eine abzubrechende Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird.

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

Parameter

delay
TimeSpan

Die Zeitspanne, die abgewartet werden soll, bevor die zurückgegebene Aufgabe abgeschlossen wird, oder TimeSpan.FromMilliseconds(-1), um unbegrenzt zu warten.

cancellationToken
CancellationToken

Ein Abbruchtoken, das beim Warten auf den Abschluss der Aufgabe überwacht werden soll.

Gibt zurück

Task

Eine Aufgabe, die die Verzögerung darstellt.

Ausnahmen

delay stellt ein negatives Zeitintervall ungleich TimeSpan.FromMilliseconds(-1) dar.

- oder - Die delay Eigenschaft des TotalMilliseconds Arguments ist größer als 4294967294 für .NET 6 und höher, oder Int32.MaxValue für alle vorherigen Versionen.

Die Aufgabe wurde abgebrochen.

Das angegebene cancellationToken wurde bereits verworfen.

Beispiele

Im folgenden Beispiel wird eine Aufgabe gestartet, die einen Aufruf der Delay(TimeSpan, CancellationToken) Methode mit einer Verzögerung von 1,5 Sekunden enthält. Bevor das Verzögerungsintervall abgelaufen ist, wird das Token abgebrochen. Die Ausgabe aus dem Beispiel zeigt, dass daher eine TaskCanceledException ausgelöst wird, und die Eigenschaft der Aufgaben Status wird auf Canceledfestgelegt.

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

Beachten Sie, dass dieses Beispiel eine potenzielle Racebedingung enthält: Es hängt von der asynchronen Ausführung der Verzögerung ab, wenn das Token abgebrochen wird. Obwohl die 1,5-Sekunden-Verzögerung vom Aufruf der Delay(TimeSpan, CancellationToken) Methode die Annahme wahrscheinlich macht, ist es dennoch möglich, dass der Aufruf der Delay(TimeSpan, CancellationToken) Methode zurückgegeben werden kann, bevor das Token abgebrochen wird. In diesem Fall erzeugt das Beispiel die folgende Ausgabe:

Task t Status: RanToCompletion, Result: 42  

Hinweise

Wenn das Abbruchtoken vor der angegebenen Zeitverzögerung signalisiert wird, wird eine TaskCanceledException Ausnahme erzielt, und die Aufgabe wird im Canceled Zustand abgeschlossen. Andernfalls wird der Vorgang im RanToCompletion Zustand abgeschlossen, nachdem die angegebene Zeitverzögerung abgelaufen ist.

Weitere Beispiele finden Sie in der Dokumentation für die Delay(Int32) Überladung.

Diese Methode hängt von der Systemuhr ab. Dies bedeutet, dass die Zeitverzögerung ungefähr der Auflösung der Systemuhr entspricht, wenn das delay Argument kleiner als die Auflösung der Systemuhr ist, die etwa 15 Millisekunden auf Windows Systemen beträgt.

Hinweis

Die verwendete Systemuhr ist dieselbe Uhr, die von GetTickCount verwendet wird, die nicht von Änderungen betroffen ist, die mit timeBeginPeriod und timeEndPeriod vorgenommen wurden.

Gilt für: