Aracılığıyla paylaş


Task.Delay Yöntem

Tanım

Bir gecikmeden sonra tamamlanacak bir görev oluşturur.

Aşırı Yüklemeler

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

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

millisecondsDelay bağımsız değişkeni -1'den küçüktür.

Örnekler

Aşağıdaki örnekte Delay yönteminin basit kullanımı gösterilmektedir.

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: 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
    
  • Görev yürütülürken bazen. Bu durumda, Delay yöntemine yapılan çağrı, aşağıdaki örnekte gösterildiği gibi bir görev içinde alt görev olarak yürütülür. Delay yöntemini çağıran görev zaman uyumsuz olarak yürütüleceğinden, üst görevin await anahtar sözcüğünü kullanarak tamamlanmasını beklemesi gerektiğ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: 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
    

Belirtilen gecikmeden sonra görev RanToCompletion durumunda tamamlanır.

Bu yöntem sistem saat bağlıdır. Bu, millisecondsDelay bağımsız değişkeni Windows sistemlerinde yaklaşık 15 milisaniye olan sistem saatinin çözünürlüğünden azsa, zaman gecikmesinin sistem saatinin çözünürlüğüne yaklaşık olarak eşit olacağı anlamına gelir.

Not

Kullanılan sistem saati, GetTickCounttarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriodile yapılan değişikliklerden etkilenmez.

Şunlara uygulanır

Delay(TimeSpan)

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 gereken süre veya süresiz olarak beklemek için Timeout.InfiniteTimeSpan.

Döndürülenler

Gecikme süresini temsil eden bir görev.

Özel durumlar

delay, Timeout.InfiniteTimeSpandışında bir negatif zaman aralığını temsil eder.

-veya-

bağımsız değişkeninin özelliği .NET 6 ve sonraki sürümlerde 4294967294'den büyük veya önceki tüm sürümlerde Int32.MaxValue .

Örnekler

Aşağıdaki örnekte Delay yönteminin basit kullanımı gösterilmektedir.

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 RanToCompletion durumda tamamlanır.

Kullanım senaryoları ve ek örnekler için Delay(Int32) aşırı yükleme belgelerine bakın.

Bu yöntem sistem saat bağlıdır. Bu, delay bağımsız değişkeni Windows sistemlerinde yaklaşık 15 milisaniye olan sistem saatinin çözünürlüğünden azsa, zaman gecikmesinin sistem saatinin çözünürlüğüne yaklaşık olarak eşit olacağı anlamına gelir.

Not

Kullanılan sistem saati, GetTickCounttarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriodile yapılan değişikliklerden etkilenmez.

Şunlara uygulanır

Delay(Int32, CancellationToken)

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

millisecondsDelay bağımsız değişkeni -1'den küçü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, bir saniye gecikmeyle Delay(Int32, CancellationToken) yöntemine çağrı içeren bir görev başlatır. Gecikme süresi dolmadan önce belirteç iptal edilir. Örnekten elde edilen çıkış, sonuç olarak bir TaskCanceledException atıldığını ve görevlerin Status özelliğinin Canceledolarak ayarlandığı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, TaskCanceledException bir özel durum sonuçlanır ve görev Canceled durumunda tamamlanır. Aksi takdirde, belirtilen gecikme süresi geçtikten sonra görev RanToCompletion durumunda tamamlanır.

Kullanım senaryoları ve ek örnekler için Delay(Int32) aşırı yükleme belgelerine bakın.

Bu yöntem sistem saat bağlıdır. Bu, millisecondsDelay bağımsız değişkeni Windows sistemlerinde yaklaşık 15 milisaniye olan sistem saatinin çözünürlüğünden azsa, zaman gecikmesinin sistem saatinin çözünürlüğüne yaklaşık olarak eşit olacağı anlamına gelir.

Not

Kullanılan sistem saati, GetTickCounttarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriodile yapılan değişikliklerden etkilenmez.

Şunlara uygulanır

Delay(TimeSpan, CancellationToken)

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 gereken süre veya süresiz olarak beklemek için Timeout.InfiniteTimeSpan.

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, Timeout.InfiniteTimeSpandışında bir negatif zaman aralığını temsil eder.

-veya-

bağımsız değişkeninin özelliği .NET 6 ve sonraki sürümlerde 4294967294'den büyük veya önceki tüm sürümlerde Int32.MaxValue .

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 Delay(TimeSpan, CancellationToken) yöntemine çağrı içeren bir görev başlatır. Gecikme süresi dolmadan önce belirteç iptal edilir. Örnekten elde edilen çıkış, sonuç olarak bir TaskCanceledException atıldığını ve görevlerin Status özelliğinin Canceledolarak ayarlandığı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. Delay(TimeSpan, CancellationToken) yöntemine çağrıdan 1,5 saniyelik gecikme, bu varsayımı olası hale getirse de, yine de belirteç iptal etmeden önce Delay(TimeSpan, CancellationToken) yöntemine 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, TaskCanceledException bir özel durum sonuçlanır ve görev Canceled durumunda tamamlanır. Aksi takdirde, belirtilen gecikme süresi geçtikten sonra görev RanToCompletion durumunda tamamlanır.

Kullanım senaryoları ve ek örnekler için Delay(Int32) aşırı yükleme belgelerine bakın.

Bu yöntem sistem saat bağlıdır. Bu, delay bağımsız değişkeni Windows sistemlerinde yaklaşık 15 milisaniye olan sistem saatinin çözünürlüğünden azsa, zaman gecikmesinin sistem saatinin çözünürlüğüne yaklaşık olarak eşit olacağı anlamına gelir.

Not

Kullanılan sistem saati, GetTickCounttarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriodile yapılan değişikliklerden etkilenmez.

Şunlara uygulanır

Delay(TimeSpan, TimeProvider)

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 görevi tamamlamadan önce beklenmesi gereken TimeSpan veya süresiz olarak beklemeyi InfiniteTimeSpan.

timeProvider
TimeProvider

delayyorumlanabilen TimeProvider.

Döndürülenler

Gecikme süresini temsil eden bir görev.

Özel durumlar

delay, InfiniteTimeSpandışında bir negatif zaman aralığını temsil eder.

-veya-

delay'nin TotalMilliseconds özelliği 4294967294'den büyüktür.

timeProvider bağımsız değişkeni null.

Şunlara uygulanır

Delay(TimeSpan, TimeProvider, CancellationToken)

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 görevi tamamlamadan önce beklenmesi gereken TimeSpan veya süresiz olarak beklemeyi InfiniteTimeSpan.

timeProvider
TimeProvider

delayyorumlanabilen TimeProvider.

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, InfiniteTimeSpandışında bir negatif zaman aralığını temsil eder.

-veya-

delay'nin TotalMilliseconds özelliği 4294967294'den büyüktür.

timeProvider bağımsız değişkeni null.

İptal belirteci iptal edildi. Bu özel durum, döndürülen görevde depolanır.

Şunlara uygulanır