Task.Delay Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Membuat tugas yang akan selesai setelah penundaan waktu.
Overload
Delay(TimeSpan, TimeProvider, CancellationToken) |
Membuat tugas yang dapat dibatalkan yang selesai setelah interval waktu tertentu. |
Delay(TimeSpan, CancellationToken) |
Membuat tugas yang dapat dibatalkan yang selesai setelah interval waktu tertentu. |
Delay(TimeSpan, TimeProvider) |
Membuat tugas yang selesai setelah interval waktu tertentu. |
Delay(TimeSpan) |
Membuat tugas yang selesai setelah interval waktu tertentu. |
Delay(Int32) |
Membuat tugas yang selesai setelah jumlah milidetik tertentu. |
Delay(Int32, CancellationToken) |
Membuat tugas yang dapat dibatalkan yang selesai setelah jumlah milidetik tertentu. |
Delay(TimeSpan, TimeProvider, CancellationToken)
- Source:
- Task.cs
- Source:
- Task.cs
Membuat tugas yang dapat dibatalkan yang selesai setelah interval waktu tertentu.
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
menunggu TimeSpan sebelum menyelesaikan tugas yang dikembalikan, atau InfiniteTimeSpan menunggu tanpa batas waktu.
- timeProvider
- TimeProvider
yang TimeProvider akan ditafsirkan delay
.
- cancellationToken
- CancellationToken
Token pembatalan untuk diamati sambil menunggu tugas selesai.
Mengembalikan
Tugas yang mewakili penundaan waktu.
Pengecualian
delay
mewakili interval waktu negatif selain InfiniteTimeSpan.
-atau-
delay
TotalMilliseconds Properti lebih besar dari 4294967294.
Argumennya timeProvider
adalah null
.
Token pembatalan dibatalkan. Pengecualian ini disimpan ke dalam tugas yang dikembalikan.
Berlaku untuk
Delay(TimeSpan, CancellationToken)
- Source:
- Task.cs
- Source:
- Task.cs
- Source:
- Task.cs
Membuat tugas yang dapat dibatalkan yang selesai setelah interval waktu tertentu.
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
Rentang waktu untuk menunggu sebelum menyelesaikan tugas yang dikembalikan, atau Timeout.InfiniteTimeSpan
menunggu tanpa batas waktu.
- cancellationToken
- CancellationToken
Token pembatalan untuk diamati sambil menunggu tugas selesai.
Mengembalikan
Tugas yang mewakili penundaan waktu.
Pengecualian
delay
mewakili interval waktu negatif selain Timeout.InfiniteTimeSpan
.
-atau-
Properti delay
argumen TotalMilliseconds lebih besar dari 4294967294 pada .NET 6 dan versi yang lebih baru, atau Int32.MaxValue pada semua versi sebelumnya.
Tugas telah dibatalkan. Pengecualian ini disimpan ke dalam tugas yang dikembalikan.
Yang disediakan cancellationToken
telah dibuang.
Contoh
Contoh berikut meluncurkan tugas yang menyertakan panggilan ke Delay(TimeSpan, CancellationToken) metode dengan penundaan 1,5 detik. Sebelum interval penundaan berlalu, token dibatalkan. Output dari contoh menunjukkan bahwa, akibatnya, dilemparkan TaskCanceledException , dan properti tugas Status diatur ke 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
Perhatikan bahwa contoh ini mencakup kondisi balapan potensial: itu tergantung pada tugas yang secara asinkron menjalankan penundaan saat token dibatalkan. Meskipun penundaan 1,5 detik dari panggilan ke Delay(TimeSpan, CancellationToken) metode membuat asumsi itu mungkin, namun ada kemungkinan bahwa panggilan ke Delay(TimeSpan, CancellationToken) metode dapat kembali sebelum token dibatalkan. Dalam hal ini, contoh menghasilkan output berikut:
Task t Status: RanToCompletion, Result: 42
Keterangan
Jika token pembatalan disinyalir sebelum penundaan waktu yang ditentukan, TaskCanceledException hasil pengecualian, dan tugas selesai dalam status Canceled . Jika tidak, tugas selesai dalam status RanToCompletion setelah penundaan waktu yang ditentukan berlalu.
Untuk skenario penggunaan dan contoh tambahan, lihat dokumentasi untuk Delay(Int32) kelebihan beban.
Metode ini tergantung pada jam sistem. Ini berarti bahwa penundaan waktu akan kira-kira sama dengan resolusi jam sistem jika delay
argumen kurang dari resolusi jam sistem, yaitu sekitar 15 milidetik pada sistem Windows.
Catatan
Jam sistem yang digunakan adalah jam yang sama yang digunakan oleh GetTickCount, yang tidak terpengaruh oleh perubahan yang dibuat dengan timeBeginPeriod dan timeEndPeriod.
Berlaku untuk
Delay(TimeSpan, TimeProvider)
- Source:
- Task.cs
- Source:
- Task.cs
Membuat tugas yang selesai setelah interval waktu tertentu.
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
menunggu TimeSpan sebelum menyelesaikan tugas yang dikembalikan, atau InfiniteTimeSpan menunggu tanpa batas waktu.
- timeProvider
- TimeProvider
yang TimeProvider akan ditafsirkan delay
.
Mengembalikan
Tugas yang mewakili penundaan waktu.
Pengecualian
delay
mewakili interval waktu negatif selain InfiniteTimeSpan.
-atau-
delay
TotalMilliseconds Properti lebih besar dari 4294967294.
Argumennya timeProvider
adalah null
.
Berlaku untuk
Delay(TimeSpan)
- Source:
- Task.cs
- Source:
- Task.cs
- Source:
- Task.cs
Membuat tugas yang selesai setelah interval waktu tertentu.
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
Rentang waktu untuk menunggu sebelum menyelesaikan tugas yang dikembalikan, atau Timeout.InfiniteTimeSpan
menunggu tanpa batas waktu.
Mengembalikan
Tugas yang mewakili penundaan waktu.
Pengecualian
delay
mewakili interval waktu negatif selain Timeout.InfiniteTimeSpan
.
-atau-
Properti delay
argumen TotalMilliseconds lebih besar dari 4294967294 pada .NET 6 dan versi yang lebih baru, atau Int32.MaxValue pada semua versi sebelumnya.
Contoh
Contoh berikut menunjukkan penggunaan Delay metode sederhana.
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
Keterangan
Setelah penundaan waktu yang ditentukan, tugas selesai dalam RanToCompletion status.
Untuk skenario penggunaan dan contoh tambahan, lihat dokumentasi untuk Delay(Int32) kelebihan beban.
Metode ini tergantung pada jam sistem. Ini berarti bahwa penundaan waktu akan kira-kira sama dengan resolusi jam sistem jika delay
argumen kurang dari resolusi jam sistem, yaitu sekitar 15 milidetik pada sistem Windows.
Catatan
Jam sistem yang digunakan adalah jam yang sama yang digunakan oleh GetTickCount, yang tidak terpengaruh oleh perubahan yang dibuat dengan timeBeginPeriod dan timeEndPeriod.
Berlaku untuk
Delay(Int32)
- Source:
- Task.cs
- Source:
- Task.cs
- Source:
- Task.cs
Membuat tugas yang selesai setelah jumlah milidetik tertentu.
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
Jumlah milidetik untuk menunggu sebelum menyelesaikan tugas yang dikembalikan, atau -1 untuk menunggu tanpa batas waktu.
Mengembalikan
Tugas yang mewakili penundaan waktu.
Pengecualian
Argumen millisecondsDelay
kurang dari -1.
Contoh
Contoh berikut menunjukkan penggunaan Delay metode sederhana.
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
Keterangan
Metode Delay ini biasanya digunakan untuk menunda operasi semua atau sebagian tugas untuk interval waktu tertentu. Paling umum, penundaan waktu diperkenalkan:
Di awal tugas, seperti yang ditunjukkan contoh berikut.
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
Beberapa saat saat tugas sedang dijalankan. Dalam hal ini, panggilan ke Delay metode dijalankan sebagai tugas anak dalam tugas, seperti yang ditunjukkan contoh berikut. Perhatikan bahwa karena tugas yang memanggil Delay metode dijalankan secara asinkron, tugas induk harus menunggunya selesai dengan menggunakan
await
kata kunci.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
Setelah penundaan waktu yang ditentukan, tugas selesai dalam status RanToCompletion .
Metode ini tergantung pada jam sistem. Ini berarti bahwa penundaan waktu akan kira-kira sama dengan resolusi jam sistem jika millisecondsDelay
argumen kurang dari resolusi jam sistem, yaitu sekitar 15 milidetik pada sistem Windows.
Catatan
Jam sistem yang digunakan adalah jam yang sama yang digunakan oleh GetTickCount, yang tidak terpengaruh oleh perubahan yang dibuat dengan timeBeginPeriod dan timeEndPeriod.
Berlaku untuk
Delay(Int32, CancellationToken)
- Source:
- Task.cs
- Source:
- Task.cs
- Source:
- Task.cs
Membuat tugas yang dapat dibatalkan yang selesai setelah jumlah milidetik tertentu.
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
Jumlah milidetik untuk menunggu sebelum menyelesaikan tugas yang dikembalikan, atau -1 untuk menunggu tanpa batas waktu.
- cancellationToken
- CancellationToken
Token pembatalan untuk diamati sambil menunggu tugas selesai.
Mengembalikan
Tugas yang mewakili penundaan waktu.
Pengecualian
Argumen millisecondsDelay
kurang dari -1.
Tugas telah dibatalkan. Pengecualian ini disimpan ke dalam tugas yang dikembalikan.
Yang disediakan cancellationToken
telah dibuang.
Contoh
Contoh berikut meluncurkan tugas yang menyertakan panggilan ke Delay(Int32, CancellationToken) metode dengan penundaan satu detik. Sebelum interval penundaan berlalu, token dibatalkan. Output dari contoh menunjukkan bahwa, akibatnya, dilemparkan TaskCanceledException , dan properti tugas Status diatur ke 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
Keterangan
Jika token pembatalan disinyalir sebelum penundaan waktu yang ditentukan, TaskCanceledException hasil pengecualian, dan tugas selesai dalam status Canceled . Jika tidak, tugas selesai dalam status RanToCompletion setelah penundaan waktu yang ditentukan berlalu.
Untuk skenario penggunaan dan contoh tambahan, lihat dokumentasi untuk Delay(Int32) kelebihan beban.
Metode ini tergantung pada jam sistem. Ini berarti bahwa penundaan waktu akan kira-kira sama dengan resolusi jam sistem jika millisecondsDelay
argumen kurang dari resolusi jam sistem, yaitu sekitar 15 milidetik pada sistem Windows.
Catatan
Jam sistem yang digunakan adalah jam yang sama yang digunakan oleh GetTickCount, yang tidak terpengaruh oleh perubahan yang dibuat dengan timeBeginPeriod dan timeEndPeriod.
Berlaku untuk
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk