Task.Delay メソッド

定義

遅延後に完了するタスクを作成します。Creates a task that will complete after a time delay.

オーバーロード

Delay(TimeSpan, CancellationToken)

指定した期間の後に完了するキャンセル可能タスクを作成します。Creates a cancellable task that completes after a specified time interval.

Delay(Int32, CancellationToken)

指定したミリ秒後に完了するキャンセル可能なタスクを作成します。Creates a cancellable task that completes after a specified number of milliseconds.

Delay(Int32)

指定したミリ秒後に完了するタスクを作成します。Creates a task that completes after a specified number of milliseconds.

Delay(TimeSpan)

指定した期間の後に完了するタスクを作成します。Creates a task that completes after a specified time interval.

Delay(TimeSpan, CancellationToken)

指定した期間の後に完了するキャンセル可能タスクを作成します。Creates a cancellable task that completes after a specified time interval.

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

パラメーター

delay
TimeSpan

戻されたタスクを完了するまでに待機する時間。無期限に待機する場合は TimeSpan.FromMilliseconds(-1)The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

cancellationToken
CancellationToken

タスクの完了の待機中に観察するキャンセル トークン。A cancellation token to observe while waiting for the task to complete.

戻り値

遅延を表すタスク。A task that represents the time delay.

例外

delay は、TimeSpan.FromMilliseconds(-1) 以外の負の時間間隔を表します。delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

- または --or- delay 引数の TotalMillisecondsプロパティが MaxValue より大きい値です。The delay argument's TotalMilliseconds property is greater than MaxValue.

タスクが取り消されました。The task has been canceled.

指定された cancellationToken は既に破棄されています。The provided cancellationToken has already been disposed.

次の例では、1.5 秒の遅延がある Delay(TimeSpan, CancellationToken) メソッドの呼び出しを含むタスクを起動します。The following example launches a task that includes a call to the Delay(TimeSpan, CancellationToken) method with a 1.5 second delay. 遅延間隔が経過する前に、トークンは取り消されます。Before the delay interval elapses, the token is cancelled. この例の出力は、結果として TaskCanceledException がスローされ、タスク ' Status ' プロパティが Canceled に設定されていることを示しています。The output from the example shows that, as a result, a TaskCanceledException is thrown, and the tasks' Status property is set to 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

この例には潜在的な競合状態が含まれていることに注意してください。これは、トークンが取り消されたときに、タスクが非同期的に遅延を実行することに依存します。Note that this example includes a potential race condition: it depends on the task asynchronously executing the delay when the token is cancelled. @No__t-0 メソッドを呼び出すと1.5 秒の遅延が発生する可能性がありますが、そのため、トークンが取り消される前に Delay(TimeSpan, CancellationToken) メソッドの呼び出しが返される可能性があります。Although the 1.5 second delay from the call to the Delay(TimeSpan, CancellationToken) method makes that assumption likely, it is nevertheless possible that the call to the Delay(TimeSpan, CancellationToken) method could return before the token is cancelled. その場合、この例では次の出力が生成されます。In that case, the example produces the following output:

Task t Status: RanToCompletion, Result: 42  

注釈

指定した時間が経過する前にキャンセルトークンがシグナル状態になった場合、@no__t 0 の例外が発生し、タスクは Canceled の状態で完了します。If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. それ以外の場合は、指定された遅延時間が経過すると、RanToCompletion の状態でタスクが完了します。Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

使用シナリオとその他の例については、Delay(Int32) のオーバーロードに関するドキュメントを参照してください。For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

この方法は、システムクロックによって異なります。This method depends on the system clock. これは、delay 引数がシステムクロックの解像度 (Windows システムで約15ミリ秒) よりも少ない場合に、時間の遅延がシステムクロックの解像度とほぼ同じであることを意味します。This means that the time delay will approximately equal the resolution of the system clock if the delay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Delay(Int32, CancellationToken)

指定したミリ秒後に完了するキャンセル可能なタスクを作成します。Creates a cancellable task that completes after a specified number of milliseconds.

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

パラメーター

millisecondsDelay
Int32

戻されたタスクを完了するまでに待機するミリ秒数。無期限に待機する場合は -1。The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

cancellationToken
CancellationToken

タスクの完了の待機中に観察するキャンセル トークン。A cancellation token to observe while waiting for the task to complete.

戻り値

遅延を表すタスク。A task that represents the time delay.

例外

millisecondsDelay 引数は -1 未満です。The millisecondsDelay argument is less than -1.

タスクが取り消されました。The task has been canceled.

指定された cancellationToken は既に破棄されています。The provided cancellationToken has already been disposed.

次の例では、1秒の遅延で Delay(Int32, CancellationToken) メソッドの呼び出しを含むタスクを起動します。The following example launches a task that includes a call to the Delay(Int32, CancellationToken) method with a one second delay. 遅延間隔が経過する前に、トークンは取り消されます。Before the delay interval elapses, the token is cancelled. この例の出力は、結果として TaskCanceledException がスローされ、タスク ' Status ' プロパティが Canceled に設定されていることを示しています。The output from the example shows that, as a result, a TaskCanceledException is thrown, and the tasks' Status property is set to 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

注釈

指定した時間が経過する前にキャンセルトークンがシグナル状態になった場合、@no__t 0 の例外が発生し、タスクは Canceled の状態で完了します。If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. それ以外の場合は、指定された遅延時間が経過すると、RanToCompletion の状態でタスクが完了します。Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

使用シナリオとその他の例については、Delay(Int32) のオーバーロードに関するドキュメントを参照してください。For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

この方法は、システムクロックによって異なります。This method depends on the system clock. これは、millisecondsDelay 引数がシステムクロックの解像度 (Windows システムで約15ミリ秒) よりも少ない場合に、時間の遅延がシステムクロックの解像度とほぼ同じであることを意味します。This means that the time delay will approximately equal the resolution of the system clock if the millisecondsDelay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Delay(Int32)

指定したミリ秒後に完了するタスクを作成します。Creates a task that completes after a specified number of milliseconds.

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。The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

戻り値

遅延を表すタスク。A task that represents the time delay.

例外

millisecondsDelay 引数は -1 未満です。The millisecondsDelay argument is less than -1.

次の例は、Delay メソッドを簡単に使用する方法を示しています。The following example shows a simple use of the Delay method.

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

注釈

@No__t-0 メソッドは、通常、指定された時間間隔でタスクの全体または一部の操作を遅延するために使用されます。The Delay method is typically used to delay the operation of all or part of a task for a specified time interval. 通常、遅延時間は次のようになります。Most commonly, the time delay is introduced:

  • 次の例に示すように、タスクの先頭にあります。At the beginning of the task, as the following example shows.

    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
    
  • タスクの実行中に発生します。Sometime while the task is executing. この場合、次の例に示すように、Delay メソッドの呼び出しは、タスク内の子タスクとして実行されます。In this case, the call to the Delay method executes as a child task within a task, as the following example shows. @No__t-0 メソッドを呼び出すタスクは非同期的に実行されるため、親タスクは、await キーワードを使用して完了するまで待機する必要があることに注意してください。Note that since the task that calls the Delay method executes asynchronously, the parent task must wait for it to complete by using the await keyword.

    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
    

指定された遅延時間が経過すると、タスクは @no__t 0 の状態で完了します。After the specified time delay, the task is completed in the RanToCompletion state.

この方法は、システムクロックによって異なります。This method depends on the system clock. これは、millisecondsDelay 引数がシステムクロックの解像度 (Windows システムで約15ミリ秒) よりも少ない場合に、時間の遅延がシステムクロックの解像度とほぼ同じであることを意味します。This means that the time delay will approximately equal the resolution of the system clock if the millisecondsDelay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Delay(TimeSpan)

指定した期間の後に完了するタスクを作成します。Creates a task that completes after a specified time interval.

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)The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

戻り値

遅延を表すタスク。A task that represents the time delay.

例外

delay は、TimeSpan.FromMilliseconds(-1) 以外の負の時間間隔を表します。delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

- または --or- delay 引数の TotalMillisecondsプロパティが MaxValue より大きい値です。The delay argument's TotalMilliseconds property is greater than MaxValue.

次の例は、Delay メソッドを簡単に使用する方法を示しています。The following example shows a simple use of the Delay method.

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

注釈

指定された遅延時間が経過すると、タスクは @no__t 0 の状態で完了します。After the specified time delay, the task is completed in RanToCompletion state.

使用シナリオとその他の例については、Delay(Int32) のオーバーロードに関するドキュメントを参照してください。For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

この方法は、システムクロックによって異なります。This method depends on the system clock. これは、delay 引数がシステムクロックの解像度 (Windows システムで約15ミリ秒) よりも少ない場合に、時間の遅延がシステムクロックの解像度とほぼ同じであることを意味します。This means that the time delay will approximately equal the resolution of the system clock if the delay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

適用対象