Task.Delay Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Tworzy zadanie, które zostanie ukończone po upływie opóźnienia.
Przeciążenia
Delay(Int32) |
Tworzy zadanie, które zostanie ukończone po określonej liczbie milisekund. |
Delay(TimeSpan) |
Tworzy zadanie, które zostanie ukończone po określonym przedziale czasu. |
Delay(Int32, CancellationToken) |
Tworzy zadanie, które można anulować, które zostanie ukończone po określonej liczbie milisekund. |
Delay(TimeSpan, CancellationToken) |
Tworzy zadanie, które można anulować, które zostanie ukończone po określonym interwale czasu. |
Delay(TimeSpan, TimeProvider) |
Tworzy zadanie, które zostanie ukończone po określonym przedziale czasu. |
Delay(TimeSpan, TimeProvider, CancellationToken) |
Tworzy zadanie, które można anulować, które zostanie ukończone po określonym interwale czasu. |
Delay(Int32)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Tworzy zadanie, które zostanie ukończone po określonej liczbie 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
Liczba milisekund oczekiwania przed ukończeniem zwróconego zadania lub -1, aby czekać na czas nieokreślony.
Zwraca
Zadanie reprezentujące opóźnienie czasowe.
Wyjątki
Argument millisecondsDelay
jest mniejszy niż -1.
Przykłady
W poniższym przykładzie pokazano proste użycie 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
Uwagi
Metoda Delay jest zwykle używana do opóźnienia działania wszystkich lub części zadania w określonym przedziale czasu. Najczęściej wprowadza się opóźnienie czasowe:
Na początku zadania, jak pokazano w poniższym przykładzie.
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
Czasami podczas wykonywania zadania. W tym przypadku wywołanie Delay metody jest wykonywane jako zadanie podrzędne w zadaniu, jak pokazano w poniższym przykładzie. Należy pamiętać, że ponieważ zadanie, które wywołuje Delay metodę, jest wykonywane asynchronicznie, zadanie nadrzędne musi czekać na jego ukończenie przy użyciu słowa kluczowego
await
.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
Po upływie określonego opóźnienia czasu zadanie zostanie ukończone RanToCompletion w stanie .
Ta metoda zależy od zegara systemowego. Oznacza to, że opóźnienie czasu będzie w przybliżeniu równe rozdzielczości zegara systemowego, jeśli millisecondsDelay
argument jest mniejszy niż rozdzielczość zegara systemowego, który wynosi około 15 milisekund w systemach Windows.
Uwaga
Zegar systemowy, który jest używany jest ten sam zegar używany przez GetTickCount, który nie ma wpływu na zmiany wprowadzone w timeBeginPeriod i timeEndPeriod.
Dotyczy
Delay(TimeSpan)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Tworzy zadanie, które zostanie ukończone po określonym przedziale czasu.
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 Timeout.InfiniteTimeSpan
zaczekaj na czas nieokreślony.
Zwraca
Zadanie reprezentujące opóźnienie czasowe.
Wyjątki
delay
reprezentuje ujemny interwał czasu inny niż Timeout.InfiniteTimeSpan
.
-lub-
Właściwość delay
argumentu TotalMilliseconds jest większa niż 4294967294 na platformie .NET 6 i nowszych wersjach lub Int32.MaxValue we wszystkich poprzednich wersjach.
Przykłady
W poniższym przykładzie pokazano proste użycie 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
Uwagi
Po upływie określonego opóźnienia czasu zadanie zostanie ukończone w RanToCompletion stanie .
Aby zapoznać się ze scenariuszami użycia i dodatkowymi przykładami, zobacz dokumentację przeciążenia Delay(Int32) .
Ta metoda zależy od zegara systemowego. Oznacza to, że opóźnienie czasu będzie w przybliżeniu równe rozdzielczości zegara systemowego, jeśli delay
argument jest mniejszy niż rozdzielczość zegara systemowego, który wynosi około 15 milisekund w systemach Windows.
Uwaga
Zegar systemowy, który jest używany jest ten sam zegar używany przez GetTickCount, który nie ma wpływu na zmiany wprowadzone w timeBeginPeriod i timeEndPeriod.
Dotyczy
Delay(Int32, CancellationToken)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Tworzy zadanie, które można anulować, które zostanie ukończone po określonej liczbie 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
Liczba milisekund oczekiwania przed ukończeniem zwróconego zadania lub -1, aby czekać na czas nieokreślony.
- cancellationToken
- CancellationToken
Token anulowania, który będzie obserwowany podczas oczekiwania na ukończenie zadania.
Zwraca
Zadanie reprezentujące opóźnienie czasowe.
Wyjątki
Argument millisecondsDelay
jest mniejszy niż -1.
Zadanie zostało anulowane. Ten wyjątek jest przechowywany w zwracanym zadaniu.
Podany cancellationToken
element został już usunięty.
Przykłady
W poniższym przykładzie uruchamiane jest zadanie zawierające wywołanie Delay(Int32, CancellationToken) metody z jednosekundowym opóźnieniem. Przed upływem interwału opóźnienia token zostanie anulowany. Dane wyjściowe z przykładu pokazują, TaskCanceledException że w rezultacie element jest zgłaszany, a właściwość zadań Status jest ustawiona na Canceledwartość .
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
Uwagi
Jeśli token anulowania jest sygnalizowany przed określonym opóźnieniem TaskCanceledException czasu, wynik wyjątku i zadanie zostanie ukończone Canceled w stanie . W przeciwnym razie zadanie jest wykonywane w RanToCompletion stanie po upływie określonego opóźnienia czasu.
Aby zapoznać się ze scenariuszami użycia i dodatkowymi przykładami, zobacz dokumentację przeciążenia Delay(Int32) .
Ta metoda zależy od zegara systemowego. Oznacza to, że opóźnienie czasu będzie w przybliżeniu równe rozdzielczości zegara systemowego, jeśli millisecondsDelay
argument jest mniejszy niż rozdzielczość zegara systemowego, który wynosi około 15 milisekund w systemach Windows.
Uwaga
Zegar systemowy, który jest używany jest ten sam zegar używany przez GetTickCount, który nie ma wpływu na zmiany wprowadzone w timeBeginPeriod i timeEndPeriod.
Dotyczy
Delay(TimeSpan, CancellationToken)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Tworzy zadanie, które można anulować, które zostanie ukończone po określonym interwale czasu.
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 Timeout.InfiniteTimeSpan
zaczekaj na czas nieokreślony.
- cancellationToken
- CancellationToken
Token anulowania, który będzie obserwowany podczas oczekiwania na ukończenie zadania.
Zwraca
Zadanie reprezentujące opóźnienie czasowe.
Wyjątki
delay
reprezentuje ujemny interwał czasu inny niż Timeout.InfiniteTimeSpan
.
-lub-
Właściwość delay
argumentu TotalMilliseconds jest większa niż 4294967294 na platformie .NET 6 i nowszych wersjach lub Int32.MaxValue we wszystkich poprzednich wersjach.
Zadanie zostało anulowane. Ten wyjątek jest przechowywany w zwracanym zadaniu.
Podany cancellationToken
element został już usunięty.
Przykłady
Poniższy przykład uruchamia zadanie, które zawiera wywołanie Delay(TimeSpan, CancellationToken) metody z opóźnieniem 1,5 sekundy. Przed upływem interwału opóźnienia token zostanie anulowany. Dane wyjściowe z przykładu pokazują, TaskCanceledException że w rezultacie element jest zgłaszany, a właściwość zadań Status jest ustawiona na Canceledwartość .
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
Należy pamiętać, że ten przykład zawiera potencjalny warunek wyścigu: zależy to od zadania asynchronicznego wykonywania opóźnienia po anulowaniu tokenu. Mimo że 1,5 sekundowe opóźnienie wywołania Delay(TimeSpan, CancellationToken) metody sprawia, że takie założenie jest prawdopodobne, jednak możliwe jest, że wywołanie Delay(TimeSpan, CancellationToken) metody może zostać zwrócone przed anulowaniem tokenu. W takim przypadku przykład generuje następujące dane wyjściowe:
Task t Status: RanToCompletion, Result: 42
Uwagi
Jeśli token anulowania jest sygnalizowany przed określonym opóźnieniem TaskCanceledException czasu, wynik wyjątku i zadanie zostanie ukończone Canceled w stanie . W przeciwnym razie zadanie jest wykonywane w RanToCompletion stanie po upływie określonego opóźnienia czasu.
Aby zapoznać się ze scenariuszami użycia i dodatkowymi przykładami, zobacz dokumentację przeciążenia Delay(Int32) .
Ta metoda zależy od zegara systemowego. Oznacza to, że opóźnienie czasu będzie w przybliżeniu równe rozdzielczości zegara systemowego, jeśli delay
argument jest mniejszy niż rozdzielczość zegara systemowego, który wynosi około 15 milisekund w systemach Windows.
Uwaga
Zegar systemowy, który jest używany jest ten sam zegar używany przez GetTickCount, który nie ma wpływu na zmiany wprowadzone w timeBeginPeriod i timeEndPeriod.
Dotyczy
Delay(TimeSpan, TimeProvider)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Tworzy zadanie, które zostanie ukończone po określonym przedziale czasu.
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
Przed TimeSpan ukończeniem zwróconego zadania lub InfiniteTimeSpan zaczekaj na czas nieokreślony.
- timeProvider
- TimeProvider
Element TimeProvider , za pomocą którego należy interpretować delay
element .
Zwraca
Zadanie reprezentujące opóźnienie czasowe.
Wyjątki
delay
reprezentuje ujemny interwał czasu inny niż InfiniteTimeSpan.
-lub-
delay
Właściwość 's TotalMilliseconds jest większa niż 4294967294.
Argumentem timeProvider
jest null
.
Dotyczy
Delay(TimeSpan, TimeProvider, CancellationToken)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Tworzy zadanie, które można anulować, które zostanie ukończone po określonym interwale czasu.
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
Przed TimeSpan ukończeniem zwróconego zadania lub InfiniteTimeSpan zaczekaj na czas nieokreślony.
- timeProvider
- TimeProvider
Element TimeProvider , za pomocą którego należy interpretować delay
element .
- cancellationToken
- CancellationToken
Token anulowania, który będzie obserwowany podczas oczekiwania na ukończenie zadania.
Zwraca
Zadanie reprezentujące opóźnienie czasowe.
Wyjątki
delay
reprezentuje ujemny interwał czasu inny niż InfiniteTimeSpan.
-lub-
delay
Właściwość 's TotalMilliseconds jest większa niż 4294967294.
Argumentem timeProvider
jest null
.
Token anulowania został anulowany. Ten wyjątek jest przechowywany w zwracanym zadaniu.
Dotyczy
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla