Task.Delay Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Erstellt eine Aufgabe, die nach einer Verzögerung abgeschlossen wird.
Überlädt
Delay(TimeSpan, TimeProvider, CancellationToken) |
Erstellt eine abzubrechende Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird. |
Delay(TimeSpan, CancellationToken) |
Erstellt eine abzubrechende Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird. |
Delay(TimeSpan, TimeProvider) |
Erstellt eine Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird. |
Delay(TimeSpan) |
Erstellt eine Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird. |
Delay(Int32) |
Erstellt eine Aufgabe, die nach Ablauf einer festgelegten Anzahl an Millisekunden abgeschlossen wird. |
Delay(Int32, CancellationToken) |
Erstellt eine stornierbare Aufgabe, die nach Ablauf einer festgelegten Anzahl an Millisekunden abgeschlossen wird. |
Delay(TimeSpan, TimeProvider, CancellationToken)
Erstellt eine abzubrechende Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird.
public:
static System::Threading::Tasks::Task ^ Delay(TimeSpan delay, TimeProvider ^ timeProvider, System::Threading::CancellationToken cancellationToken);
public static System.Threading.Tasks.Task Delay (TimeSpan delay, TimeProvider timeProvider, System.Threading.CancellationToken cancellationToken);
static member Delay : TimeSpan * TimeProvider * System.Threading.CancellationToken -> System.Threading.Tasks.Task
Public Shared Function Delay (delay As TimeSpan, timeProvider As TimeProvider, cancellationToken As CancellationToken) As Task
Parameter
- delay
- TimeSpan
Der TimeSpan , um zu warten, bevor die zurückgegebene Aufgabe abgeschlossen wird, oder InfiniteTimeSpan auf unbestimmte Zeit zu warten.
- timeProvider
- TimeProvider
Der TimeProvider , mit dem interpretiert werden delay
soll.
- cancellationToken
- CancellationToken
Ein Abbruchtoken, das beim Warten auf den Abschluss der Aufgabe überwacht werden soll.
Gibt zurück
Eine Aufgabe, die die Verzögerung darstellt.
Ausnahmen
delay
stellt ein negatives Zeitintervall ungleich InfiniteTimeSpan dar.
- oder -
delay
Die Eigenschaft von TotalMilliseconds ist größer als 4294967294.
Das timeProvider
-Argument lautet null
.
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 Timeout.InfiniteTimeSpan
, um unbegrenzt zu warten.
- cancellationToken
- CancellationToken
Ein Abbruchtoken, das beim Warten auf den Abschluss der Aufgabe überwacht werden soll.
Gibt zurück
Eine Aufgabe, die die Verzögerung darstellt.
Ausnahmen
delay
stellt ein negatives Zeitintervall ungleich Timeout.InfiniteTimeSpan
dar.
- oder -
Die delay
-Eigenschaft des TotalMilliseconds Arguments ist größer als 4294967294 in .NET 6 und höheren Versionen oder Int32.MaxValue in allen vorherigen Versionen.
Die Aufgabe wurde abgebrochen.
Das angegebene cancellationToken
wurde bereits verworfen.
Beispiele
Im folgenden Beispiel wird eine Aufgabe gestartet, die einen Aufruf der -Methode mit einer Verzögerung von Delay(TimeSpan, CancellationToken) 1,5 Sekunden enthält. Bevor das Verzögerungsintervall verstreicht, wird das Token abgebrochen. Die Ausgabe des Beispiels zeigt, dass als Ergebnis ein TaskCanceledException ausgelöst wird und die Tasks-Eigenschaft Status auf Canceledfestgelegt ist.
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
open System
open System.Threading
open System.Threading.Tasks
let source = new CancellationTokenSource()
let t =
Task.Run<int>(fun () ->
task {
do! Task.Delay(TimeSpan.FromSeconds(1.5), source.Token)
return 42
})
source.Cancel()
try
t.Wait()
with :? AggregateException as ae ->
for e in ae.InnerExceptions do
printfn $"{e.GetType().Name}: {e.Message}"
printf $"Task t Status: {t.Status}"
if t.Status = TaskStatus.RanToCompletion then
printf $", Result: {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 davon ab, dass die Aufgabe die Verzögerung asynchron ausführt, wenn das Token abgebrochen wird. Obwohl die Verzögerung des Aufrufs der Delay(TimeSpan, CancellationToken) Methode um 1,5 Sekunden diese Annahme wahrscheinlich macht, ist es dennoch möglich, dass der Aufruf der Delay(TimeSpan, CancellationToken) -Methode zurückgegeben wird, 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, entsteht eine TaskCanceledException Ausnahme, und die Aufgabe wird im Canceled Zustand abgeschlossen. Andernfalls wird die Aufgabe im RanToCompletion Zustand abgeschlossen, sobald die angegebene Zeitverzögerung verstrichen ist.
Nutzungsszenarien und 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 auf Windows-Systemen etwa 15 Millisekunden beträgt.
Hinweis
Bei der verwendeten Systemuhr handelt es sich um dieselbe Uhr, die von GetTickCount verwendet wird. Dies ist nicht von Änderungen betroffen, die mit timeBeginPeriod und timeEndPeriod vorgenommen werden.
Gilt für:
Delay(TimeSpan, TimeProvider)
Erstellt eine Aufgabe, die nach Ablauf einer festgelegten Zeitspanne abgeschlossen wird.
public:
static System::Threading::Tasks::Task ^ Delay(TimeSpan delay, TimeProvider ^ timeProvider);
public static System.Threading.Tasks.Task Delay (TimeSpan delay, TimeProvider timeProvider);
static member Delay : TimeSpan * TimeProvider -> System.Threading.Tasks.Task
Public Shared Function Delay (delay As TimeSpan, timeProvider As TimeProvider) As Task
Parameter
- delay
- TimeSpan
Der TimeSpan , um zu warten, bevor die zurückgegebene Aufgabe abgeschlossen wird, oder InfiniteTimeSpan auf unbestimmte Zeit zu warten.
- timeProvider
- TimeProvider
Der TimeProvider , mit dem interpretiert werden delay
soll.
Gibt zurück
Eine Aufgabe, die die Verzögerung darstellt.
Ausnahmen
delay
stellt ein negatives Zeitintervall ungleich InfiniteTimeSpan dar.
- oder -
delay
Die Eigenschaft von TotalMilliseconds ist größer als 4294967294.
Das timeProvider
-Argument lautet null
.
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 Timeout.InfiniteTimeSpan
, um unbegrenzt zu warten.
Gibt zurück
Eine Aufgabe, die die Verzögerung darstellt.
Ausnahmen
delay
stellt ein negatives Zeitintervall ungleich Timeout.InfiniteTimeSpan
dar.
- oder -
Die delay
-Eigenschaft des TotalMilliseconds Arguments ist größer als 4294967294 in .NET 6 und höheren Versionen oder Int32.MaxValue in allen 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
open System
open System.Threading.Tasks
let t =
Task.Run<int>(fun () ->
task {
do! Task.Delay(TimeSpan.FromSeconds 1.5)
return 42
})
t.Wait()
printfn $"Task t Status: {t.Status}, Result: {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 die Aufgabe im RanToCompletion Zustand abgeschlossen.
Nutzungsszenarien und 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 auf Windows-Systemen etwa 15 Millisekunden beträgt.
Hinweis
Bei der verwendeten Systemuhr handelt es sich um dieselbe Uhr, die von GetTickCount verwendet wird. Dies ist nicht von Änderungen betroffen, die mit timeBeginPeriod und timeEndPeriod vorgenommen werden.
Gilt für:
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 der Millisekunden, die gewartet wird, bevor die zurückgegebene Aufgabe abgeschlossen wird, oder -1, um unbegrenzt zu warten.
Gibt zurück
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
open System.Threading.Tasks
let t =
Task.Run<int>(fun () ->
task {
do! Task.Delay 1000
return 42
})
t.Wait()
printfn $"Task t Status: {t.Status}, Result: {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 eines Vorgangs ganz oder teilweise für ein angegebenes Zeitintervall zu verzögern. Am häufigsten wird die Zeitverzögerung eingeführt:
Am Anfang der Aufgabe, wie das folgende Beispiel zeigt.
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
let sw = Stopwatch.StartNew() let delay = Task .Delay(1000) .ContinueWith(fun _ -> sw.Stop() sw.ElapsedMilliseconds) printfn $"Elapsed milliseconds: {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
Irgendwann, 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 Task, der die Delay -Methode aufruft, asynchron ausgeführt wird, die übergeordnete Aufgabe mit dem Schlüsselwort (keyword) warten muss, bis sie
await
abgeschlossen ist.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
let delay = Task.Run<int64>(fun () -> task { let sw = Stopwatch.StartNew() do! Task.Delay 2500 sw.Stop() return sw.ElapsedMilliseconds }) printfn $"Elapsed milliseconds: {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 die Aufgabe 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 auf Windows-Systemen etwa 15 Millisekunden beträgt.
Hinweis
Bei der verwendeten Systemuhr handelt es sich um dieselbe Uhr, die von GetTickCount verwendet wird. Dies ist nicht von Änderungen betroffen, die mit timeBeginPeriod und timeEndPeriod vorgenommen werden.
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
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 -Methode mit einer Verzögerung von Delay(Int32, CancellationToken) einer Sekunde enthält. Bevor das Verzögerungsintervall verstreicht, wird das Token abgebrochen. Die Ausgabe des Beispiels zeigt, dass als Ergebnis ein TaskCanceledException ausgelöst wird und die Tasks-Eigenschaft Status auf Canceledfestgelegt ist.
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
open System
open System.Threading
open System.Threading.Tasks
let source = new CancellationTokenSource()
let t =
Task.Run<int>(fun () ->
task {
do! Task.Delay(1000, source.Token)
return 42
})
source.Cancel()
try
t.Wait()
with :? AggregateException as ae ->
for e in ae.InnerExceptions do
printfn $"{e.GetType().Name}: {e.Message}"
printf $"Task t Status: {t.Status}"
if t.Status = TaskStatus.RanToCompletion then
printf $", Result: {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, entsteht eine TaskCanceledException Ausnahme, und die Aufgabe wird im Canceled Zustand abgeschlossen. Andernfalls wird die Aufgabe im RanToCompletion Zustand abgeschlossen, sobald die angegebene Zeitverzögerung verstrichen ist.
Nutzungsszenarien und 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 auf Windows-Systemen etwa 15 Millisekunden beträgt.
Hinweis
Bei der verwendeten Systemuhr handelt es sich um dieselbe Uhr, die von GetTickCount verwendet wird. Dies ist nicht von Änderungen betroffen, die mit timeBeginPeriod und timeEndPeriod vorgenommen werden.