Task.Delay メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
遅延後に完了するタスクを作成します。
オーバーロード
Delay(Int32) |
指定したミリ秒後に完了するタスクを作成します。 |
Delay(TimeSpan) |
指定した期間の後に完了するタスクを作成します。 |
Delay(Int32, CancellationToken) |
指定したミリ秒後に完了するキャンセル可能なタスクを作成します。 |
Delay(TimeSpan, CancellationToken) |
指定した期間の後に完了するキャンセル可能タスクを作成します。 |
Delay(TimeSpan, TimeProvider) |
指定した期間の後に完了するタスクを作成します。 |
Delay(TimeSpan, TimeProvider, CancellationToken) |
指定した期間の後に完了するキャンセル可能タスクを作成します。 |
Delay(Int32)
- ソース:
- Task.cs
- ソース:
- Task.cs
- ソース:
- Task.cs
指定したミリ秒後に完了するタスクを作成します。
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。
戻り値
遅延を表すタスク。
例外
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
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
注釈
メソッドは 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
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
タスクの実行中に。 この場合、 メソッドの呼び出しは Delay 、次の例に示すように、タスク内で子タスクとして実行されます。 メソッドを呼び出Delayすタスクは非同期的に実行されるため、親タスクは キーワード (keyword)を使用
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
指定した遅延時間が経過すると、タスクは状態で完了します RanToCompletion 。
このメソッドは、システム クロックに依存します。 つまり、引数がシステム クロックの解像度 (Windows システムでは約 15 ミリ秒) より小さい場合 millisecondsDelay
、遅延時間はシステム クロックの解像度とほぼ等しくなります。
注意
使用されるシステム クロックは 、GetTickCount で使用されるのと同じクロックであり、 timeBeginPeriod と timeEndPeriod で行われた変更の影響を受けません。
適用対象
Delay(TimeSpan)
- ソース:
- Task.cs
- ソース:
- Task.cs
- ソース:
- Task.cs
指定した期間の後に完了するタスクを作成します。
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
戻されたタスクを完了するまでに待機する時間。無期限に待機する場合は Timeout.InfiniteTimeSpan
。
戻り値
遅延を表すタスク。
例外
delay
は、Timeout.InfiniteTimeSpan
以外の負の時間間隔を表します。
または
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
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
注釈
指定した遅延時間が経過すると、タスクは状態で RanToCompletion 完了します。
使用シナリオとその他の例については、オーバーロードのドキュメントを Delay(Int32) 参照してください。
このメソッドは、システム クロックに依存します。 つまり、引数がシステム クロックの解像度 (Windows システムでは約 15 ミリ秒) より小さい場合 delay
、遅延時間はシステム クロックの解像度とほぼ等しくなります。
注意
使用されるシステム クロックは 、GetTickCount で使用されるのと同じクロックであり、 timeBeginPeriod と timeEndPeriod で行われた変更の影響を受けません。
適用対象
Delay(Int32, CancellationToken)
- ソース:
- Task.cs
- ソース:
- Task.cs
- ソース:
- Task.cs
指定したミリ秒後に完了するキャンセル可能なタスクを作成します。
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
タスクの完了の待機中に観察するキャンセル トークン。
戻り値
遅延を表すタスク。
例外
millisecondsDelay
引数は -1 未満です。
タスクが取り消されました。 この例外は、返されたタスクに格納されます。
指定された cancellationToken
は既に破棄されています。
例
次の例では、1 秒の遅延で メソッドの呼び出しを Delay(Int32, CancellationToken) 含むタスクを起動します。 遅延間隔が経過する前に、トークンは取り消されます。 この例の出力は、結果として が 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
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
注釈
キャンセル トークンが指定された遅延時間より前に通知されると、 TaskCanceledException 例外が発生し、タスクが状態で Canceled 完了します。 それ以外の場合は、指定した時間の遅延が経過すると、タスクは状態で RanToCompletion 完了します。
使用シナリオとその他の例については、オーバーロードのドキュメントを Delay(Int32) 参照してください。
このメソッドは、システム クロックに依存します。 つまり、引数がシステム クロックの解像度 (Windows システムでは約 15 ミリ秒) より小さい場合 millisecondsDelay
、遅延時間はシステム クロックの解像度とほぼ等しくなります。
注意
使用されるシステム クロックは 、GetTickCount で使用されるのと同じクロックであり、 timeBeginPeriod と timeEndPeriod で行われた変更の影響を受けません。
適用対象
Delay(TimeSpan, CancellationToken)
- ソース:
- Task.cs
- ソース:
- Task.cs
- ソース:
- Task.cs
指定した期間の後に完了するキャンセル可能タスクを作成します。
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
戻されたタスクを完了するまでに待機する時間。無期限に待機する場合は Timeout.InfiniteTimeSpan
。
- cancellationToken
- CancellationToken
タスクの完了の待機中に観察するキャンセル トークン。
戻り値
遅延を表すタスク。
例外
delay
は、Timeout.InfiniteTimeSpan
以外の負の時間間隔を表します。
または
delay
引数の TotalMilliseconds プロパティは、.NET 6 以降のバージョンでは4294967294より大きく、以前のすべてのバージョンでは Int32.MaxValue を超えています。
タスクが取り消されました。 この例外は、返されたタスクに格納されます。
指定された cancellationToken
は既に破棄されています。
例
次の例では、1.5 秒の遅延で メソッドの Delay(TimeSpan, CancellationToken) 呼び出しを含むタスクを起動します。 遅延間隔が経過する前に、トークンは取り消されます。 この例の出力は、結果として が 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
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
この例には、潜在的な競合状態が含まれていることに注意してください。これは、トークンが取り消されたときの遅延を非同期的に実行するタスクによって異なります。 メソッドの呼び出し Delay(TimeSpan, CancellationToken) から 1.5 秒の遅延が発生すると、その前提が生じる可能性がありますが、トークンが取り消される前に メソッドの Delay(TimeSpan, CancellationToken) 呼び出しが返される可能性があります。 その場合、この例では次の出力が生成されます。
Task t Status: RanToCompletion, Result: 42
注釈
キャンセル トークンが指定された遅延時間より前に通知されると、 TaskCanceledException 例外が発生し、タスクが状態で Canceled 完了します。 それ以外の場合は、指定した時間の遅延が経過すると、タスクは状態で RanToCompletion 完了します。
使用シナリオとその他の例については、オーバーロードのドキュメントを Delay(Int32) 参照してください。
このメソッドは、システム クロックに依存します。 つまり、引数がシステム クロックの解像度 (Windows システムでは約 15 ミリ秒) より小さい場合 delay
、遅延時間はシステム クロックの解像度とほぼ等しくなります。
注意
使用されるシステム クロックは 、GetTickCount で使用されるのと同じクロックであり、 timeBeginPeriod と timeEndPeriod で行われた変更の影響を受けません。
適用対象
Delay(TimeSpan, TimeProvider)
- ソース:
- Task.cs
- ソース:
- Task.cs
指定した期間の後に完了するタスクを作成します。
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
パラメーター
- delay
- TimeSpan
TimeSpan返されたタスクを完了する前に待機するかInfiniteTimeSpan、無期限に待機する 。
- timeProvider
- TimeProvider
TimeProviderを解釈delay
する 。
戻り値
遅延を表すタスク。
例外
timeProvider
引数が null
です。
適用対象
Delay(TimeSpan, TimeProvider, CancellationToken)
- ソース:
- Task.cs
- ソース:
- Task.cs
指定した期間の後に完了するキャンセル可能タスクを作成します。
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
パラメーター
- delay
- TimeSpan
TimeSpan返されたタスクを完了する前に待機するかInfiniteTimeSpan、無期限に待機する 。
- timeProvider
- TimeProvider
TimeProviderを解釈delay
する 対象の 。
- cancellationToken
- CancellationToken
タスクの完了の待機中に観察するキャンセル トークン。
戻り値
遅延を表すタスク。
例外
timeProvider
引数が null
です。
キャンセル トークンが取り消されました。 この例外は、返されたタスクに格納されます。
適用対象
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示