Task<TResult> クラス

定義

値を返すことができる非同期操作を表します。

generic <typename TResult>
public ref class Task : System::Threading::Tasks::Task
public class Task<TResult> : System.Threading.Tasks.Task
type Task<'Result> = class
    inherit Task
Public Class Task(Of TResult)
Inherits Task

型パラメーター

TResult

この Task<TResult> によって生成される結果の型。

継承
Task<TResult>

注釈

クラスは Task<TResult> 、値を返し、通常は非同期的に実行される 1 つの操作を表します。 Task<TResult>オブジェクトは、.NET Framework 4 で最初に導入されたタスク ベースの非同期パターンの中心的なコンポーネントの 1 つです。 オブジェクトによって実行されるTask<TResult>作業は、通常、メイン アプリケーション スレッドではなくスレッド プール スレッドで非同期的に実行されるため、 プロパティと プロパティ、IsCanceledIsCompleted、および IsFaulted プロパティを使用Statusして、タスクの状態を判断できます。 最も一般的には、ラムダ式を使用して、タスクが実行する作業を指定します。

Task<TResult> インスタンスは、さまざまな方法で作成できます。 .NET Framework 4.5 以降で使用できる最も一般的な方法は、静的Task.Run<TResult>(Func<TResult>)メソッドまたは Task.Run<TResult>(Func<TResult>, CancellationToken) メソッドを呼び出す方法です。 これらのメソッドは、既定値を使用し、追加のパラメーターを取得せずにタスクを開始する簡単な方法を提供します。 次の例では、 メソッドを Task.Run<TResult>(Func<TResult>) 使用してループするタスクを開始し、ループイテレーションの数を表示します。

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Run( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                                    } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays output like the following:
//        Finished 1,000,001 loop iterations.
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t As Task(Of Integer) = Task.Run(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                        ctr += 1
                                        Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays the following output:
'       Finished 1,000,001 loop iterations

また、.NET Framework 4 でタスクを開始する最も一般的な方法として、静的TaskFactory.StartNewメソッドまたは TaskFactory<TResult>.StartNew メソッドを呼び出す方法があります。 プロパティは Task.Factory オブジェクトを TaskFactory 返し、 プロパティは Task<TResult>.Factory オブジェクトを TaskFactory<TResult> 返します。 メソッド StartNew のオーバーロードを使用すると、引数を渡したり、タスク作成オプションを定義したり、タスク スケジューラを指定したりできます。 次の例では、 メソッドを TaskFactory<TResult>.StartNew(Func<TResult>) 使用してタスクを開始します。 これは、前の例のコードと機能的に同等です。

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Factory.StartNew( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                               } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays the following output:
//        Finished 1000001 loop iterations
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t = Task(Of Integer).Factory.StartNew(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                       ctr += 1
                                       Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays output like the following:
'       Finished 1,000,001 iterations

詳細な例については、「 タスク ベースの非同期プログラミング」を参照してください。

クラスには Task<TResult> 、タスクを初期化するコンストラクターも用意されていますが、実行のスケジュールは設定しません。 パフォーマンス上の理由から、 Task.Run メソッドと Task.Factory.StartNew メソッドは計算タスクを作成およびスケジュールするための推奨されるメカニズムですが、タスクの作成とスケジュールを分離する必要があるシナリオでは、コンストラクターを使用し、タスクの Start メソッドを使用して後で実行するタスクをスケジュールできます。

.NET Framework 4.6 を対象とするデスクトップ アプリ以降では、タスクを作成して呼び出すスレッドのカルチャがスレッドのコンテキストの一部になります。 つまり、タスクが実行されるスレッドの現在のカルチャに関係なく、タスクの現在のカルチャは呼び出し元スレッドのカルチャです。 .NET Framework 4.6 より前のバージョンの.NET Frameworkを対象とするアプリの場合、タスクのカルチャは、タスクが実行されるスレッドのカルチャです。 詳細については、トピックの「カルチャとタスクベースの非同期操作」セクションを CultureInfo 参照してください。 ストア アプリは、既定のカルチャの設定と取得に関するWindows ランタイムに従います。

値を返さない操作の場合は、 クラスを使用します Task 。 C# 7.0 以降では、参照型ではなく値型であるより軽量なタスクでは、 構造体を System.Threading.Tasks.ValueTask<TResult> 使用します。

コンストラクター

Task<TResult>(Func<Object,TResult>, Object)

指定の関数と状態で新しい Task<TResult> を初期化します。

Task<TResult>(Func<Object,TResult>, Object, CancellationToken)

指定したアクション、状態、およびオプションで新しい Task<TResult> を初期化します。

Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions)

指定したアクション、状態、およびオプションで新しい Task<TResult> を初期化します。

Task<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

指定したアクション、状態、およびオプションで新しい Task<TResult> を初期化します。

Task<TResult>(Func<TResult>)

指定の関数で新しい Task<TResult> を初期化します。

Task<TResult>(Func<TResult>, CancellationToken)

指定の関数で新しい Task<TResult> を初期化します。

Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions)

指定の関数と作成オプションを使用して新しい Task<TResult> を初期化します。

Task<TResult>(Func<TResult>, TaskCreationOptions)

指定の関数と作成オプションを使用して新しい Task<TResult> を初期化します。

プロパティ

AsyncState

Task が作成されたときに渡される状態オブジェクトを取得します。渡されなかった場合は null。

(継承元 Task)
CreationOptions

このタスクの作成に使用される TaskCreationOptions を取得します。

(継承元 Task)
Exception

AggregateException が途中で終了する原因となった Task を取得します。 Task が正常に完了した場合、または例外がスローされていない場合は、null が返されます。

(継承元 Task)
Factory

インスタンスを作成および構成 Task<TResult> するためのファクトリ メソッドを取得します。

Id

この Task インスタンスの ID を取得します。

(継承元 Task)
IsCanceled

この Task インスタンスの実行が取り消されることによって完了したかどうかを示す値を取得します。

(継承元 Task)
IsCompleted

タスクが完了したかどうかを示す値を取得します。

(継承元 Task)
IsCompletedSuccessfully

タスクが完了まで実行されたかどうかを示す値を取得します。

(継承元 Task)
IsFaulted

処理されない例外が発生したことが原因で Task が完了したかどうかを示す値を取得します。

(継承元 Task)
Result

この Task<TResult> の結果値を取得します。

Status

このタスクの TaskStatus を取得します。

(継承元 Task)

メソッド

ConfigureAwait(Boolean)

この Task<TResult> を待機するために使用する awaiter を構成します。

ConfigureAwait(Boolean)

この Task を待機するために使用する awaiter を構成します。

(継承元 Task)
ConfigureAwait(ConfigureAwaitOptions)

この Task を待機するために使用する awaiter を構成します。

ConfigureAwait(ConfigureAwaitOptions)

この Task を待機するために使用する awaiter を構成します。

(継承元 Task)
ContinueWith(Action<Task,Object>, Object)

呼び出し元が提供した状態情報を受け取り、対象の Task が完了したときに実行される継続タスクを作成します。

(継承元 Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken)

呼び出し元が提供した状態情報およびキャンセル トークンを受け取り、対象の Task の完了時に非同期的に実行される継続タスクを作成します。

(継承元 Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

呼び出し元が提供した状態情報およびキャンセル トークンを受け取り、対象の Task の完了時に実行される継続タスクを作成します。 継続タスクは、指定した一連の条件に基づいて実行され、指定したスケジューラが使用されます。

(継承元 Task)
ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions)

呼び出し元が提供した状態情報を受け取り、対象の Task が完了したときに実行される継続タスクを作成します。 継続タスクは、指定した一連の条件に基づいて実行されます。

(継承元 Task)
ContinueWith(Action<Task,Object>, Object, TaskScheduler)

呼び出し元が提供した状態情報を受け取り、対象の Task が完了したときに非同期的に実行される継続タスクを作成します。 継続タスクは、指定されたスケジューラを使用します。

(継承元 Task)
ContinueWith(Action<Task<TResult>,Object>, Object)

状態の情報を渡される継続と、ターゲット Task<TResult> が完了したときに実行する継続を作成します。

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken)

ターゲットの Task<TResult> が完了したときに実行する継続タスクを作成します。

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

ターゲットの Task<TResult> が完了したときに実行する継続タスクを作成します。

ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions)

ターゲットの Task<TResult> が完了したときに実行する継続タスクを作成します。

ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler)

ターゲットの Task<TResult> が完了したときに実行する継続タスクを作成します。

ContinueWith(Action<Task<TResult>>)

対象タスクの完了時に、非同期に実行する継続タスクを作成します。

ContinueWith(Action<Task<TResult>>, CancellationToken)

対象の Task<TResult> の完了時に、非同期的に実行するキャンセル可能な継続タスクを作成します。

ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

continuationOptions で指定した条件に従って実行する継続タスクを作成します。

ContinueWith(Action<Task<TResult>>, TaskContinuationOptions)

continuationOptions で指定した条件に従って実行する継続タスクを作成します。

ContinueWith(Action<Task<TResult>>, TaskScheduler)

ターゲットの Task<TResult> が完了したときに非同期に実行する継続タスクを作成します。

ContinueWith(Action<Task>)

ターゲットの Task が完了したときに非同期に実行する継続タスクを作成します。

(継承元 Task)
ContinueWith(Action<Task>, CancellationToken)

キャンセル トークンを受け取って、対象の Task が完了したときに非同期的に実行される継続タスクを作成します。

(継承元 Task)
ContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

対象のタスクが完了したときに、指定した TaskContinuationOptions に従って実行される継続タスクを作成します。 この継続タスクは、キャンセル トークンを受け取り、指定されたスケジューラを使用します。

(継承元 Task)
ContinueWith(Action<Task>, TaskContinuationOptions)

対象のタスクが完了したときに、指定した TaskContinuationOptions に従って実行される継続タスクを作成します。

(継承元 Task)
ContinueWith(Action<Task>, TaskScheduler)

ターゲットの Task が完了したときに非同期に実行する継続タスクを作成します。 継続タスクは、指定されたスケジューラを使用します。

(継承元 Task)
ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object)

ターゲットの Task<TResult> が完了したときに実行する継続タスクを作成します。

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken)

ターゲットの Task<TResult> が完了したときに実行する継続タスクを作成します。

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

ターゲットの Task<TResult> が完了したときに実行する継続タスクを作成します。

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskContinuationOptions)

ターゲットの Task<TResult> が完了したときに実行する継続タスクを作成します。

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskScheduler)

ターゲットの Task<TResult> が完了したときに実行する継続タスクを作成します。

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>)

ターゲットの Task<TResult> が完了したときに非同期に実行する継続タスクを作成します。

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken)

ターゲットの Task<TResult> が完了したときに非同期に実行する継続タスクを作成します。

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

continuationOptions で指定した条件に従って実行する継続タスクを作成します。

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions)

continuationOptions で指定した条件に従って実行する継続タスクを作成します。

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler)

ターゲットの Task<TResult> が完了したときに非同期に実行する継続タスクを作成します。

ContinueWith<TResult>(Func<Task,Object,TResult>, Object)

呼び出し元から提供される状態情報を受け取り、対象の Task が完了したときに非同期的に実行され、値を返す継続タスクを作成します。

(継承元 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken)

対象の Task が完了して値を返したときに非同期的に実行される継続タスクを作成します。 この継続タスクは、呼び出し元が提供した状態情報とキャンセル トークンを受け取ります。

(継承元 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

対象の Task が完了したときに、指定したタスク継続オプションに基づいて実行され、値を返す継続タスクを作成します。 この継続タスクは、呼び出し元が提供した状態情報とキャンセル トークンを受け取り、指定したスケジューラを使用します。

(継承元 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskContinuationOptions)

対象の Task が完了したときに、指定したタスク継続オプションに基づいて実行される継続タスクを作成します。 この継続タスクは、呼び出し元が提供した状態情報を受け取ります。

(継承元 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskScheduler)

ターゲットの Task が完了したときに非同期に実行する継続タスクを作成します。 この継続タスクは、呼び出し元が提供した状態情報を受け取り、指定したスケジューラを使用します。

(継承元 Task)
ContinueWith<TResult>(Func<Task,TResult>)

対象の Task<TResult> が完了して値を返したときに非同期的に実行される継続タスクを作成します。

(継承元 Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken)

対象の Task が完了して値を返したときに非同期的に実行される継続タスクを作成します。 この継続タスクは、キャンセル トークンを受け取ります。

(継承元 Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

指定された継続のオプションに従って実行され、値を返す継続タスクを作成します。 継続タスクは、キャンセル トークンを渡され、指定されたスケジューラを使用します。

(継承元 Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions)

指定された継続のオプションに従って実行され、値を返す継続タスクを作成します。

(継承元 Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler)

対象の Task が完了して値を返したときに非同期的に実行される継続タスクを作成します。 継続タスクは、指定されたスケジューラを使用します。

(継承元 Task)
Dispose()

Task クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。

(継承元 Task)
Dispose(Boolean)

Task を破棄し、そのすべてのアンマネージ リソースを解放します。

(継承元 Task)
Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetAwaiter()

この Task<TResult> を待機するために使用する awaiter を取得します。

GetAwaiter()

この Task を待機するために使用する awaiter を取得します。

(継承元 Task)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
RunSynchronously()

現在の TaskTaskScheduler を同期的に実行します。

(継承元 Task)
RunSynchronously(TaskScheduler)

指定された TaskTaskScheduler を同期的に実行します。

(継承元 Task)
Start()

現在の TaskTaskScheduler の実行をスケジュールし、それを開始します。

(継承元 Task)
Start(TaskScheduler)

指定された TaskTaskScheduler の実行をスケジュールし、それを開始します。

(継承元 Task)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
Wait()

Task の実行が完了するまで待機します。

(継承元 Task)
Wait(CancellationToken)

Task の実行が完了するまで待機します。 タスクの完了前にキャンセル トークンが取り消される場合は、待機が終了します。

(継承元 Task)
Wait(Int32)

提供された Task の実行が完了するまで、指定したミリ秒数以内の間、待機します。

(継承元 Task)
Wait(Int32, CancellationToken)

Task の実行が完了するまで待機します。 タスクの完了前に、タイムアウト期間が経過するか、キャンセル トークンが取り消される場合には、待機が終了します。

(継承元 Task)
Wait(TimeSpan)

提供された Task の実行が完了するまで、指定した時間間隔内の間、待機します。

(継承元 Task)
Wait(TimeSpan, CancellationToken)

Task の実行が完了するまで待機します。

(継承元 Task)
WaitAsync(CancellationToken)

Task<TResult>これがTask<TResult>完了したとき、または指定した CancellationToken にキャンセルが要求されたときに完了する を取得します。

WaitAsync(CancellationToken)

TaskこれがTask完了したとき、または指定した CancellationToken が取り消し要求を受けたときに完了する を取得します。

(継承元 Task)
WaitAsync(TimeSpan)

Task<TResult>これがTask<TResult>完了するか、指定したタイムアウトの有効期限が切れたときに完了する を取得します。

WaitAsync(TimeSpan)

TaskこれがTask完了したとき、または指定したタイムアウトの有効期限が切れたときに完了する を取得します。

(継承元 Task)
WaitAsync(TimeSpan, CancellationToken)

Task<TResult>これがTask<TResult>完了したとき、指定したタイムアウトが期限切れになったとき、または指定したがキャンセル要求を受けた場合に完了する をCancellationToken取得します。

WaitAsync(TimeSpan, CancellationToken)

TaskこれがTask完了したとき、指定したタイムアウトが切れた場合、または指定した がキャンセル要求を受けた場合に完了する をCancellationToken取得します。

(継承元 Task)
WaitAsync(TimeSpan, TimeProvider)

Task<TResult>これがTask<TResult>完了するか、指定したタイムアウトの有効期限が切れたときに完了する を取得します。

WaitAsync(TimeSpan, TimeProvider)

TaskこれがTask完了したとき、または指定したタイムアウトの有効期限が切れたときに完了する を取得します。

(継承元 Task)
WaitAsync(TimeSpan, TimeProvider, CancellationToken)

Task<TResult>これがTask<TResult>完了したとき、指定したタイムアウトが期限切れになったとき、または指定したがキャンセル要求を受けた場合に完了する をCancellationToken取得します。

WaitAsync(TimeSpan, TimeProvider, CancellationToken)

TaskこれがTask完了したとき、指定したタイムアウトが切れた場合、または指定した がキャンセル要求を受けた場合に完了する をCancellationToken取得します。

(継承元 Task)

明示的なインターフェイスの実装

IAsyncResult.AsyncWaitHandle

タスクの完了を待機するために使用できる WaitHandle を取得します。

(継承元 Task)
IAsyncResult.CompletedSynchronously

操作が同期的に完了したかどうかを示す値を取得します。

(継承元 Task)

拡張メソッド

DispatcherOperationWait(Task)

基になる DispatcherOperation が完了するまで無期限に待機します。

DispatcherOperationWait(Task, TimeSpan)

基になる DispatcherOperation が完了するまで、指定された時間待機します。

IsDispatcherOperationTask(Task)

この TaskDispatcherOperation に関連付けられているかどうかを示す値を返します。

AsAsyncAction(Task)

開始されたタスクを表す Windows ランタイム非同期アクションを返します。

AsAsyncOperation<TResult>(Task<TResult>)

結果を返す開始されたタスクを表す Windows ランタイム非同期操作を返します。

適用対象

スレッド セーフ

を除く Dispose()すべてのTask<TResult>メンバーはスレッド セーフであり、複数のスレッドから同時に使用できます。

こちらもご覧ください