Task.Delay Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vytvoří úkol, který se dokončí po časovém zpoždění.
Přetížení
| Name | Description |
|---|---|
| Delay(Int32) |
Vytvoří úlohu, která se dokončí po zadaném počtu milisekund. |
| Delay(TimeSpan) |
Vytvoří úlohu, která se dokončí po zadaném časovém intervalu. |
| Delay(Int32, CancellationToken) |
Vytvoří zrušený úkol, který se dokončí po zadaném počtu milisekund. |
| Delay(TimeSpan, CancellationToken) |
Vytvoří zrušený úkol, který se dokončí po zadaném časovém intervalu. |
| Delay(TimeSpan, TimeProvider) |
Vytvoří úlohu, která se dokončí po zadaném časovém intervalu. |
| Delay(TimeSpan, TimeProvider, CancellationToken) |
Vytvoří zrušený úkol, který se dokončí po zadaném časovém intervalu. |
Delay(Int32)
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
Vytvoří úlohu, která se dokončí po zadaném počtu milisekund.
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
Počet milisekund, které se mají počkat před dokončením vráceného úkolu, nebo -1 čekat na neomezenou dobu.
Návraty
Úkol, který představuje časové zpoždění.
Výjimky
Argument millisecondsDelay je menší než -1.
Příklady
Následující příklad ukazuje jednoduché použití Delay metody.
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
Poznámky
Metoda Delay se obvykle používá ke zpoždění operace všech nebo částí úlohy pro zadaný časový interval. Nejčastěji se zavádí časové zpoždění:
Na začátku úkolu, jak ukazuje následující příklad.
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: 1013let 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: 1013Dim 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: 1013Někdy, když se úloha spouští. V tomto případě se volání Delay metody provede jako podřízený úkol v rámci úkolu, jak ukazuje následující příklad. Všimněte si, že vzhledem k tomu, že úloha, která volá metodu Delay asynchronně, musí nadřazená úloha počkat na dokončení pomocí klíčového
awaitslova.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: 2501let 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: 2501Dim 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 uplynutí zadaného časového zpoždění se úkol dokončí ve RanToCompletion stavu.
Tato metoda závisí na systémových hodinách. To znamená, že časové zpoždění se přibližně rovná rozlišení systémových hodin, pokud millisecondsDelay je argument menší než rozlišení systémových hodin, což je přibližně 15 milisekund v systémech Windows.
Poznámka
Systémové hodiny, které se používají, jsou stejné hodiny, které používá GetTickCount, což nejsou ovlivněny změnami provedenými v timeBeginPeriod a timeEndPeriod.
Platí pro
Delay(TimeSpan)
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
Vytvoří úlohu, která se dokončí po zadaném časovém intervalu.
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
Doba trvání čekání před dokončením vráceného úkolu nebo Timeout.InfiniteTimeSpan čekání na neomezenou dobu.
Návraty
Úkol, který představuje časové zpoždění.
Výjimky
delay představuje jiný záporný časový interval než Timeout.InfiniteTimeSpan.
-nebo-
Vlastnost delay argumentu TotalMilliseconds je větší než 4294967294 v .NET 6 a novějších verzích nebo Int32.MaxValue ve všech předchozích verzích.
Příklady
Následující příklad ukazuje jednoduché použití Delay metody.
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
Poznámky
Po uplynutí zadaného časového zpoždění se úkol dokončí ve RanToCompletion stavu.
Scénáře použití a další příklady najdete v dokumentaci k Delay(Int32) přetížení.
Tato metoda závisí na systémových hodinách. To znamená, že časové zpoždění se přibližně rovná rozlišení systémových hodin, pokud delay je argument menší než rozlišení systémových hodin, což je přibližně 15 milisekund v systémech Windows.
Poznámka
Systémové hodiny, které se používají, jsou stejné hodiny, které používá GetTickCount, což nejsou ovlivněny změnami provedenými v timeBeginPeriod a timeEndPeriod.
Platí pro
Delay(Int32, CancellationToken)
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
Vytvoří zrušený úkol, který se dokončí po zadaném počtu milisekund.
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
Počet milisekund, které se mají počkat před dokončením vráceného úkolu, nebo -1 čekat na neomezenou dobu.
- cancellationToken
- CancellationToken
Token zrušení, který se má sledovat při čekání na dokončení úkolu.
Návraty
Úkol, který představuje časové zpoždění.
Výjimky
Argument millisecondsDelay je menší než -1.
Úkol byl zrušen. Tato výjimka je uložena do vrácené úlohy.
Poskytnutá služba cancellationToken již byla uvolněna.
Úkol byl zrušen.
Příklady
Následující příklad spustí úlohu, která zahrnuje volání Delay(Int32, CancellationToken) metody s jedním druhým zpožděním. Před uplynutím intervalu zpoždění se token zruší. Výstup z příkladu ukazuje, TaskCanceledException že v důsledku toho je vyvolán a vlastnost úkoly Status je nastavena na 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
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
Poznámky
Pokud je token zrušení signalován před zadaným časovým zpožděním, dojde k výjimce TaskCanceledException a úkol se dokončí ve Canceled stavu. V opačném případě se úkol dokončí ve RanToCompletion stavu po uplynutí zadaného časového zpoždění.
Scénáře použití a další příklady najdete v dokumentaci k Delay(Int32) přetížení.
Tato metoda závisí na systémových hodinách. To znamená, že časové zpoždění se přibližně rovná rozlišení systémových hodin, pokud millisecondsDelay je argument menší než rozlišení systémových hodin, což je přibližně 15 milisekund v systémech Windows.
Poznámka
Systémové hodiny, které se používají, jsou stejné hodiny, které používá GetTickCount, což nejsou ovlivněny změnami provedenými v timeBeginPeriod a timeEndPeriod.
Platí pro
Delay(TimeSpan, CancellationToken)
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
Vytvoří zrušený úkol, který se dokončí po zadaném časovém intervalu.
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
Doba trvání čekání před dokončením vráceného úkolu nebo Timeout.InfiniteTimeSpan čekání na neomezenou dobu.
- cancellationToken
- CancellationToken
Token zrušení, který se má sledovat při čekání na dokončení úkolu.
Návraty
Úkol, který představuje časové zpoždění.
Výjimky
delay představuje jiný záporný časový interval než Timeout.InfiniteTimeSpan.
-nebo-
Vlastnost delay argumentu TotalMilliseconds je větší než 4294967294 v .NET 6 a novějších verzích nebo Int32.MaxValue ve všech předchozích verzích.
Úkol byl zrušen. Tato výjimka je uložena do vrácené úlohy.
Poskytnutá služba cancellationToken již byla uvolněna.
Úkol byl zrušen.
Příklady
Následující příklad spustí úlohu, která zahrnuje volání Delay(TimeSpan, CancellationToken) metody se zpožděním 1,5 sekundy. Před uplynutím intervalu zpoždění se token zruší. Výstup z příkladu ukazuje, TaskCanceledException že v důsledku toho je vyvolán a vlastnost úkoly Status je nastavena na 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
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
Všimněte si, že tento příklad obsahuje potenciální časovou podmínku: závisí na úkolu, který asynchronně spouští zpoždění při zrušení tokenu. I když 1,5 sekundy od volání Delay(TimeSpan, CancellationToken) metody je pravděpodobné, že je pravděpodobné, že volání Delay(TimeSpan, CancellationToken) metody by se mohlo vrátit před zrušením tokenu. V takovém případě příklad vytvoří následující výstup:
Task t Status: RanToCompletion, Result: 42
Poznámky
Pokud je token zrušení signalován před zadaným časovým zpožděním, dojde k výjimce TaskCanceledException a úkol se dokončí ve Canceled stavu. V opačném případě se úkol dokončí ve RanToCompletion stavu po uplynutí zadaného časového zpoždění.
Scénáře použití a další příklady najdete v dokumentaci k Delay(Int32) přetížení.
Tato metoda závisí na systémových hodinách. To znamená, že časové zpoždění se přibližně rovná rozlišení systémových hodin, pokud delay je argument menší než rozlišení systémových hodin, což je přibližně 15 milisekund v systémech Windows.
Poznámka
Systémové hodiny, které se používají, jsou stejné hodiny, které používá GetTickCount, což nejsou ovlivněny změnami provedenými v timeBeginPeriod a timeEndPeriod.
Platí pro
Delay(TimeSpan, TimeProvider)
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
Vytvoří úlohu, která se dokončí po zadaném časovém intervalu.
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
Parametry
- delay
- TimeSpan
Čekání TimeSpan před dokončením vráceného úkolu nebo InfiniteTimeSpan čekání na neomezenou dobu.
- timeProvider
- TimeProvider
S TimeProvider tím, s nímž je třeba interpretovat delay.
Návraty
Úkol, který představuje časové zpoždění.
Výjimky
delay představuje jiný záporný časový interval než InfiniteTimeSpan.
-nebo-
delay
TotalMilliseconds vlastnost je větší než 4294967294.
Argument timeProvider je null.
Platí pro
Delay(TimeSpan, TimeProvider, CancellationToken)
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
- Zdroj:
- Task.cs
Vytvoří zrušený úkol, který se dokončí po zadaném časovém intervalu.
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
Parametry
- delay
- TimeSpan
Čekání TimeSpan před dokončením vráceného úkolu nebo InfiniteTimeSpan čekání na neomezenou dobu.
- timeProvider
- TimeProvider
S TimeProvider tím, s nímž je třeba interpretovat delay.
- cancellationToken
- CancellationToken
Token zrušení, který se má sledovat při čekání na dokončení úkolu.
Návraty
Úkol, který představuje časové zpoždění.
Výjimky
delay představuje jiný záporný časový interval než InfiniteTimeSpan.
-nebo-
delay
TotalMilliseconds vlastnost je větší než 4294967294.
Argument timeProvider je null.
Token zrušení byl zrušen. Tato výjimka je uložena do vrácené úlohy.