Bagikan melalui


Task.Delay Metode

Definisi

Membuat tugas yang akan selesai setelah penundaan waktu.

Overload

Delay(Int32)

Membuat tugas yang selesai setelah jumlah milidetik tertentu.

Delay(TimeSpan)

Membuat tugas yang selesai setelah interval waktu tertentu.

Delay(Int32, CancellationToken)

Membuat tugas yang dapat dibatalkan yang selesai setelah jumlah milidetik 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, TimeProvider, CancellationToken)

Membuat tugas yang dapat dibatalkan yang selesai setelah interval waktu tertentu.

Delay(Int32)

Sumber:
Task.cs
Sumber:
Task.cs
Sumber:
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 sederhana metode 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

Keterangan

Metode Delay biasanya digunakan untuk menunda operasi semua atau sebagian tugas untuk interval waktu yang ditentukan. 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
    
  • Kadang-kadang saat tugas sedang dijalankan. Dalam hal ini, panggilan ke metode Delay dijalankan sebagai tugas anak dalam tugas, seperti yang ditunjukkan contoh berikut. Perhatikan bahwa karena tugas yang memanggil metode Delay dijalankan secara asinkron, tugas induk harus menunggunya selesai dengan menggunakan kata kunci 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
    

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 argumen millisecondsDelay kurang dari resolusi jam sistem, yang sekitar 15 milidetik pada sistem Windows.

Nota

Jam sistem yang digunakan adalah jam yang sama yang digunakan oleh GetTickCount, yang tidak terpengaruh oleh perubahan yang dilakukan dengan timeBeginPeriod dan timeEndPeriod.

Berlaku untuk

Delay(TimeSpan)

Sumber:
Task.cs
Sumber:
Task.cs
Sumber:
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 untuk menunggu tanpa batas waktu.

Mengembalikan

Tugas yang mewakili penundaan waktu.

Pengecualian

delay mewakili interval waktu negatif selain Timeout.InfiniteTimeSpan.

-atau-

Properti TotalMilliseconds argumen delay lebih besar dari 4294967294 pada .NET 6 dan versi yang lebih baru, atau int32.MaxValue pada semua versi sebelumnya.

Contoh

Contoh berikut menunjukkan penggunaan sederhana metode 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

Keterangan

Setelah penundaan waktu yang ditentukan, tugas selesai dalam status RanToCompletion.

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 argumen delay kurang dari resolusi jam sistem, yang sekitar 15 milidetik pada sistem Windows.

Nota

Jam sistem yang digunakan adalah jam yang sama yang digunakan oleh GetTickCount, yang tidak terpengaruh oleh perubahan yang dilakukan dengan timeBeginPeriod dan timeEndPeriod.

Berlaku untuk

Delay(Int32, CancellationToken)

Sumber:
Task.cs
Sumber:
Task.cs
Sumber:
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.

cancellationToken yang disediakan telah dibuang.

Tugas telah dibatalkan.

Contoh

Contoh berikut meluncurkan tugas yang menyertakan panggilan ke metode Delay(Int32, CancellationToken) dengan penundaan satu detik. Sebelum interval penundaan berlalu, token dibatalkan. Output dari contoh menunjukkan bahwa, sebagai hasilnya, TaskCanceledException dilemparkan, dan properti Status tugas 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 argumen millisecondsDelay kurang dari resolusi jam sistem, yang sekitar 15 milidetik pada sistem Windows.

Nota

Jam sistem yang digunakan adalah jam yang sama yang digunakan oleh GetTickCount, yang tidak terpengaruh oleh perubahan yang dilakukan dengan timeBeginPeriod dan timeEndPeriod.

Berlaku untuk

Delay(TimeSpan, CancellationToken)

Sumber:
Task.cs
Sumber:
Task.cs
Sumber:
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 untuk 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 TotalMilliseconds argumen delay 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.

cancellationToken yang disediakan telah dibuang.

Tugas telah dibatalkan.

Contoh

Contoh berikut meluncurkan tugas yang menyertakan panggilan ke metode Delay(TimeSpan, CancellationToken) dengan penundaan 1,5 detik. Sebelum interval penundaan berlalu, token dibatalkan. Output dari contoh menunjukkan bahwa, sebagai hasilnya, TaskCanceledException dilemparkan, dan properti Status tugas 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 ketika token dibatalkan. Meskipun penundaan 1,5 detik dari panggilan ke metode Delay(TimeSpan, CancellationToken) membuat asumsi itu kemungkinan, namun demikian ada kemungkinan bahwa panggilan ke metode Delay(TimeSpan, CancellationToken) 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 argumen delay kurang dari resolusi jam sistem, yang sekitar 15 milidetik pada sistem Windows.

Nota

Jam sistem yang digunakan adalah jam yang sama yang digunakan oleh GetTickCount, yang tidak terpengaruh oleh perubahan yang dilakukan dengan timeBeginPeriod dan timeEndPeriod.

Berlaku untuk

Delay(TimeSpan, TimeProvider)

Sumber:
Task.cs
Sumber:
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

TimeSpan menunggu sebelum menyelesaikan tugas yang dikembalikan, atau InfiniteTimeSpan menunggu tanpa batas waktu.

timeProvider
TimeProvider

TimeProvider untuk menafsirkan delay.

Mengembalikan

Tugas yang mewakili penundaan waktu.

Pengecualian

delay mewakili interval waktu negatif selain InfiniteTimeSpan.

-atau-

properti TotalMillisecondsdelaylebih besar dari 4294967294.

Argumen timeProvidernull.

Berlaku untuk

Delay(TimeSpan, TimeProvider, CancellationToken)

Sumber:
Task.cs
Sumber:
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

TimeSpan menunggu sebelum menyelesaikan tugas yang dikembalikan, atau InfiniteTimeSpan menunggu tanpa batas waktu.

timeProvider
TimeProvider

TimeProvider untuk menafsirkan 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-

properti TotalMillisecondsdelaylebih besar dari 4294967294.

Argumen timeProvidernull.

Token pembatalan dibatalkan. Pengecualian ini disimpan ke dalam tugas yang dikembalikan.

Berlaku untuk