Task.Delay メソッド

定義

遅延後に完了するタスクを作成します。

オーバーロード

Delay(Int32)

指定したミリ秒後に完了するタスクを作成します。

Delay(TimeSpan)

指定した期間の後に完了するタスクを作成します。

Delay(Int32, CancellationToken)

指定したミリ秒後に完了するキャンセル可能なタスクを作成します。

Delay(TimeSpan, CancellationToken)

指定した期間の後に完了するキャンセル可能タスクを作成します。

Delay(Int32)

指定したミリ秒後に完了するタスクを作成します。

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

パラメーター

millisecondsDelay
Int32

戻されたタスクを完了するまでに待機するミリ秒数。無期限に待機する場合は -1。

戻り値

Task

遅延を表すタスク。

例外

millisecondsDelay 引数は -1 未満です。

次の例は、メソッドの簡単な使用を 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
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

注釈

この Delay メソッドは、通常、指定された時間間隔でタスクの全部または一部の操作を遅らせるために使用されます。 最も一般的には、時間の遅延が導入されます。

  • 次の例に示すように、タスクの先頭に表示されます。

    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
    
    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
    
  • タスクの実行中に発生する場合があります。 この場合、メソッドの呼び出しは、次の Delay 例に示すように、タスク内で子タスクとして実行されます。 メソッドを呼び出 Delay すタスクは非同期的に実行されるため、親タスクはキーワードを使用して 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
    
    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
    

指定した遅延時間が経過すると、タスクは状態で完了します RanToCompletion

この方法はシステム クロックによって異なります。 つまり、引数がシステム クロックの解像度より小さい場合millisecondsDelay、時間遅延はシステム クロックの解像度とほぼ等しくなります。これは、Windows システムでは約 15 ミリ秒です。

注意

使用されるシステム クロックは 、GetTickCount で使用されるのと同じクロックであり、 timeBeginPeriodtimeEndPeriod で行われた変更の影響を受けません。

適用対象

Delay(TimeSpan)

指定した期間の後に完了するタスクを作成します。

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

パラメーター

delay
TimeSpan

戻されたタスクを完了するまでに待機する時間。無期限に待機する場合は TimeSpan.FromMilliseconds(-1)

戻り値

Task

遅延を表すタスク。

例外

delay は、TimeSpan.FromMilliseconds(-1) 以外の負の時間間隔を表します。

または delay引数のTotalMillisecondsプロパティは、.NET 6 以降のバージョンでは4294967294より大きく、以前のすべてのバージョンでは Int32.MaxValue を超えます。

次の例は、メソッドの簡単な使用を 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
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

注釈

指定した遅延時間が経過すると、タスクは状態で RanToCompletion 完了します。

使用シナリオとその他の例については、オーバーロードのドキュメントを Delay(Int32) 参照してください。

この方法はシステム クロックによって異なります。 つまり、引数がシステム クロックの解像度より小さい場合delay、時間遅延はシステム クロックの解像度とほぼ等しくなります。これは、Windows システムでは約 15 ミリ秒です。

注意

使用されるシステム クロックは 、GetTickCount で使用されるのと同じクロックであり、 timeBeginPeriodtimeEndPeriod で行われた変更の影響を受けません。

適用対象

Delay(Int32, CancellationToken)

指定したミリ秒後に完了するキャンセル可能なタスクを作成します。

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

パラメーター

millisecondsDelay
Int32

戻されるタスクが完了するまでに待機するミリ秒数。無期限に待機する場合は -1。

cancellationToken
CancellationToken

タスクの完了の待機中に観察するキャンセル トークン。

戻り値

Task

遅延を表すタスク。

例外

millisecondsDelay 引数は -1 未満です。

タスクが取り消されました。

指定された cancellationToken は既に破棄されています。

次の例では、1 秒の遅延でメソッドの呼び出しを Delay(Int32, CancellationToken) 含むタスクを起動します。 遅延間隔が経過する前に、トークンは取り消されます。 この例の出力は、結果として a TaskCanceledException がスローされ、タスクの Status プロパティが 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
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

注釈

キャンセル トークンが指定された時間遅延の前に通知されると、 TaskCanceledException 例外が発生し、タスクが状態で完了します Canceled 。 それ以外の場合、指定した時間の遅延が経過すると、タスクは状態で RanToCompletion 完了します。

使用シナリオとその他の例については、オーバーロードのドキュメントを Delay(Int32) 参照してください。

この方法はシステム クロックによって異なります。 つまり、引数がシステム クロックの解像度より小さい場合millisecondsDelay、時間遅延はシステム クロックの解像度とほぼ等しくなります。これは、Windows システムでは約 15 ミリ秒です。

注意

使用されるシステム クロックは 、GetTickCount で使用されるのと同じクロックであり、 timeBeginPeriodtimeEndPeriod で行われた変更の影響を受けません。

適用対象

Delay(TimeSpan, CancellationToken)

指定した期間の後に完了するキャンセル可能タスクを作成します。

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

パラメーター

delay
TimeSpan

戻されたタスクを完了するまでに待機する時間。無期限に待機する場合は TimeSpan.FromMilliseconds(-1)

cancellationToken
CancellationToken

タスクの完了の待機中に観察するキャンセル トークン。

戻り値

Task

遅延を表すタスク。

例外

delay は、TimeSpan.FromMilliseconds(-1) 以外の負の時間間隔を表します。

または delay引数のTotalMillisecondsプロパティは、.NET 6 以降のバージョンでは4294967294より大きく、以前のすべてのバージョンでは Int32.MaxValue を超えます。

タスクが取り消されました。

指定された cancellationToken は既に破棄されています。

次の例では、1.5 秒の遅延でメソッドの呼び出しを Delay(TimeSpan, CancellationToken) 含むタスクを起動します。 遅延間隔が経過する前に、トークンは取り消されます。 この例の出力は、結果として a TaskCanceledException がスローされ、タスクの Status プロパティが 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
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

この例には競合状態の可能性があります。これは、トークンが取り消されたときの遅延を非同期的に実行するタスクによって異なります。 メソッドの呼び出し Delay(TimeSpan, CancellationToken) から 1.5 秒の遅延が発生すると、その前提が生じる可能性がありますが、トークンが取り消される前にメソッドの Delay(TimeSpan, CancellationToken) 呼び出しが返される可能性があります。 その場合、この例では次の出力が生成されます。

Task t Status: RanToCompletion, Result: 42  

注釈

キャンセル トークンが指定された時間遅延の前に通知されると、 TaskCanceledException 例外が発生し、タスクが状態で完了します Canceled 。 それ以外の場合、指定した時間の遅延が経過すると、タスクは状態で RanToCompletion 完了します。

使用シナリオとその他の例については、オーバーロードのドキュメントを Delay(Int32) 参照してください。

この方法はシステム クロックによって異なります。 つまり、引数がシステム クロックの解像度より小さい場合delay、時間遅延はシステム クロックの解像度とほぼ等しくなります。これは、Windows システムでは約 15 ミリ秒です。

注意

使用されるシステム クロックは 、GetTickCount で使用されるのと同じクロックであり、 timeBeginPeriodtimeEndPeriod で行われた変更の影響を受けません。

適用対象