Task.Delay Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir gecikmeden sonra tamamlanacak bir görev oluşturur.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| Delay(Int32) |
Belirtilen sayıda milisaniyeden sonra tamamlanan bir görev oluşturur. |
| Delay(TimeSpan) |
Belirtilen zaman aralığından sonra tamamlanan bir görev oluşturur. |
| Delay(Int32, CancellationToken) |
Belirtilen sayıda milisaniyeden sonra tamamlanan iptal edilebilir bir görev oluşturur. |
| Delay(TimeSpan, CancellationToken) |
Belirtilen zaman aralığından sonra tamamlanan iptal edilebilir bir görev oluşturur. |
| Delay(TimeSpan, TimeProvider) |
Belirtilen zaman aralığından sonra tamamlanan bir görev oluşturur. |
| Delay(TimeSpan, TimeProvider, CancellationToken) |
Belirtilen zaman aralığından sonra tamamlanan iptal edilebilir bir görev oluşturur. |
Delay(Int32)
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
Belirtilen sayıda milisaniyeden sonra tamamlanan bir görev oluşturur.
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
Parametreler
- millisecondsDelay
- Int32
Döndürülen görevi tamamlamadan önce beklenmesi gereken milisaniye sayısı veya süresiz olarak beklemek için -1.
Döndürülenler
Gecikme süresini temsil eden bir görev.
Özel durumlar
Bağımsız millisecondsDelay değişken -1'den küçük.
Örnekler
Aşağıdaki örnekte yönteminin basit kullanımı gösterilmektedir Delay .
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
Açıklamalar
Delay yöntemi genellikle belirli bir zaman aralığı için görevin tamamının veya bir bölümünün çalışmasını geciktirmek için kullanılır. En yaygın olarak, zaman gecikmesi ortaya çıkmıştır:
Aşağıdaki örnekte gösterildiği gibi, görevin başında.
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: 1013Görev yürütülürken bazen. Bu durumda, yöntemine yapılan Delay çağrı, aşağıdaki örnekte gösterildiği gibi bir görev içinde alt görev olarak yürütülür. yöntemini çağıran Delay görev zaman uyumsuz olarak yürütüleceğinden, üst görevin anahtar sözcüğünü kullanarak tamamlanmasını beklemesi
awaitgerektiğini unutmayın.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
Belirtilen gecikmeden sonra görev durumunda tamamlanır RanToCompletion .
Bu yöntem sistem saat bağlıdır. Bu, bağımsız değişken Windows sistemlerinde yaklaşık 15 milisaniye olan sistem saatinin çözünürlüğünden azsa millisecondsDelay , zaman gecikmesinin sistem saatinin çözünürlüğüne yaklaşık olarak eşit olacağı anlamına gelir.
Not
Kullanılan sistem saati GetTickCount tarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriod ile yapılan değişikliklerden etkilenmez.
Şunlara uygulanır
Delay(TimeSpan)
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
Belirtilen zaman aralığından sonra tamamlanan bir görev oluşturur.
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
Parametreler
- delay
- TimeSpan
Döndürülen görevi tamamlamadan önce beklenmesi veya Timeout.InfiniteTimeSpan süresiz olarak bekleme süresi.
Döndürülenler
Gecikme süresini temsil eden bir görev.
Özel durumlar
delay dışında Timeout.InfiniteTimeSpanbir negatif zaman aralığını temsil eder.
-veya-
Bağımsız değişkenin delayTotalMilliseconds özelliği .NET 6 ve sonraki sürümlerde 4294967294 veya önceki tüm sürümlerde Int32.MaxValue değerinden büyüktür.
Örnekler
Aşağıdaki örnekte yönteminin basit kullanımı gösterilmektedir Delay .
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
Açıklamalar
Belirtilen gecikmeden sonra görev durumunda tamamlanır RanToCompletion .
Kullanım senaryoları ve ek örnekler için aşırı yükleme belgelerine Delay(Int32) bakın.
Bu yöntem sistem saat bağlıdır. Bu, bağımsız değişken Windows sistemlerinde yaklaşık 15 milisaniye olan sistem saatinin çözünürlüğünden azsa delay , zaman gecikmesinin sistem saatinin çözünürlüğüne yaklaşık olarak eşit olacağı anlamına gelir.
Not
Kullanılan sistem saati GetTickCount tarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriod ile yapılan değişikliklerden etkilenmez.
Şunlara uygulanır
Delay(Int32, CancellationToken)
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
Belirtilen sayıda milisaniyeden sonra tamamlanan iptal edilebilir bir görev oluşturur.
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
Parametreler
- millisecondsDelay
- Int32
Döndürülen görevi tamamlamadan önce beklenmesi gereken milisaniye sayısı veya süresiz olarak beklemek için -1.
- cancellationToken
- CancellationToken
Görevin tamamlanmasını beklerken gözlemlenen bir iptal belirteci.
Döndürülenler
Gecikme süresini temsil eden bir görev.
Özel durumlar
Bağımsız millisecondsDelay değişken -1'den küçük.
Görev iptal edildi. Bu özel durum, döndürülen görevde depolanır.
Sağlanan cancellationToken zaten atılmış.
Görev iptal edildi.
Örnekler
Aşağıdaki örnek, bir saniyelik gecikmeyle yöntemine Delay(Int32, CancellationToken) çağrı içeren bir görev başlatır. Gecikme süresi dolmadan önce belirteç iptal edilir. Örnekten elde edilen çıktı, sonuç olarak bir TaskCanceledException atıldığını ve görevlerin Status özelliğinin olarak Canceledayarlandığını gösterir.
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
Açıklamalar
İptal belirteci belirtilen gecikmeden önce işaretleniyorsa, bir TaskCanceledException özel durum sonuçlanır ve görev durumunda tamamlanır Canceled . Aksi takdirde, belirtilen gecikme süresi geçtikten sonra görev durumunda tamamlanır RanToCompletion .
Kullanım senaryoları ve ek örnekler için aşırı yükleme belgelerine Delay(Int32) bakın.
Bu yöntem sistem saat bağlıdır. Bu, bağımsız değişken Windows sistemlerinde yaklaşık 15 milisaniye olan sistem saatinin çözünürlüğünden azsa millisecondsDelay , zaman gecikmesinin sistem saatinin çözünürlüğüne yaklaşık olarak eşit olacağı anlamına gelir.
Not
Kullanılan sistem saati GetTickCount tarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriod ile yapılan değişikliklerden etkilenmez.
Şunlara uygulanır
Delay(TimeSpan, CancellationToken)
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
Belirtilen zaman aralığından sonra tamamlanan iptal edilebilir bir görev oluşturur.
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
Parametreler
- delay
- TimeSpan
Döndürülen görevi tamamlamadan önce beklenmesi veya Timeout.InfiniteTimeSpan süresiz olarak bekleme süresi.
- cancellationToken
- CancellationToken
Görevin tamamlanmasını beklerken gözlemlenen bir iptal belirteci.
Döndürülenler
Gecikme süresini temsil eden bir görev.
Özel durumlar
delay dışında Timeout.InfiniteTimeSpanbir negatif zaman aralığını temsil eder.
-veya-
Bağımsız değişkenin delayTotalMilliseconds özelliği .NET 6 ve sonraki sürümlerde 4294967294 veya önceki tüm sürümlerde Int32.MaxValue değerinden büyüktür.
Görev iptal edildi. Bu özel durum, döndürülen görevde depolanır.
Sağlanan cancellationToken zaten atılmış.
Görev iptal edildi.
Örnekler
Aşağıdaki örnek, 1,5 saniyelik gecikmeyle yöntemine Delay(TimeSpan, CancellationToken) çağrı içeren bir görev başlatır. Gecikme süresi dolmadan önce belirteç iptal edilir. Örnekten elde edilen çıktı, sonuç olarak bir TaskCanceledException atıldığını ve görevlerin Status özelliğinin olarak Canceledayarlandığını gösterir.
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
Bu örnekte olası bir yarış durumu bulunduğuna dikkat edin: Belirteç iptal edildiğinde zaman uyumsuz olarak gecikmeyi yürüten göreve bağlıdır. Yöntemine yapılan çağrıdan Delay(TimeSpan, CancellationToken) 1,5 saniyelik gecikme, bu varsayımı olası hale getirse de, yine de belirteci iptal etmeden önce yöntemine Delay(TimeSpan, CancellationToken) yapılan çağrının döndürülebilmesi mümkündür. Bu durumda, örnek aşağıdaki çıkışı oluşturur:
Task t Status: RanToCompletion, Result: 42
Açıklamalar
İptal belirteci belirtilen gecikmeden önce işaretleniyorsa, bir TaskCanceledException özel durum sonuçlanır ve görev durumunda tamamlanır Canceled . Aksi takdirde, belirtilen gecikme süresi geçtikten sonra görev durumunda tamamlanır RanToCompletion .
Kullanım senaryoları ve ek örnekler için aşırı yükleme belgelerine Delay(Int32) bakın.
Bu yöntem sistem saat bağlıdır. Bu, bağımsız değişken Windows sistemlerinde yaklaşık 15 milisaniye olan sistem saatinin çözünürlüğünden azsa delay , zaman gecikmesinin sistem saatinin çözünürlüğüne yaklaşık olarak eşit olacağı anlamına gelir.
Not
Kullanılan sistem saati GetTickCount tarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriod ile yapılan değişikliklerden etkilenmez.
Şunlara uygulanır
Delay(TimeSpan, TimeProvider)
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
Belirtilen zaman aralığından sonra tamamlanan bir görev oluşturur.
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
Parametreler
- delay
- TimeSpan
döndürülen TimeSpan görevi tamamlamadan önce beklenmesi veya InfiniteTimeSpan süresiz olarak beklenmesi.
- timeProvider
- TimeProvider
ile TimeProvider yorumlanacak delayolan.
Döndürülenler
Gecikme süresini temsil eden bir görev.
Özel durumlar
delay dışında InfiniteTimeSpanbir negatif zaman aralığını temsil eder.
-veya-
delay'nin TotalMilliseconds özelliği 4294967294'den büyük.
timeProvider bağımsız değişkenidirnull.
Şunlara uygulanır
Delay(TimeSpan, TimeProvider, CancellationToken)
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
- Kaynak:
- Task.cs
Belirtilen zaman aralığından sonra tamamlanan iptal edilebilir bir görev oluşturur.
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
Parametreler
- delay
- TimeSpan
döndürülen TimeSpan görevi tamamlamadan önce beklenmesi veya InfiniteTimeSpan süresiz olarak beklenmesi.
- timeProvider
- TimeProvider
ile TimeProvider yorumlanacak delayolan.
- cancellationToken
- CancellationToken
Görevin tamamlanmasını beklerken gözlemlenen bir iptal belirteci.
Döndürülenler
Gecikme süresini temsil eden bir görev.
Özel durumlar
delay dışında InfiniteTimeSpanbir negatif zaman aralığını temsil eder.
-veya-
delay'nin TotalMilliseconds özelliği 4294967294'den büyük.
timeProvider bağımsız değişkenidirnull.
İptal belirteci iptal edildi. Bu özel durum, döndürülen görevde depolanır.