次の方法で共有


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

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

Task が途中で終了する原因となった AggregateException を取得します。 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()

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

(継承元 Task)
RunSynchronously(TaskScheduler)

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

(継承元 Task)
Start()

Taskを開始し、現在の TaskSchedulerへの実行をスケジュールします。

(継承元 Task)
Start(TaskScheduler)

Taskを開始し、指定した TaskSchedulerに実行するようにスケジュールします。

(継承元 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> が完了したとき、または指定した CancellationToken がキャンセル要求されたときに完了する Task<TResult> を取得します。

WaitAsync(CancellationToken)

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

(継承元 Task)
WaitAsync(TimeSpan)

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

WaitAsync(TimeSpan)

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

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

この Task<TResult> が完了したとき、指定したタイムアウトが経過したとき、または指定した CancellationToken が取り消しを要求したときに完了する Task<TResult> を取得します。

WaitAsync(TimeSpan, CancellationToken)

この Task が完了したとき、指定したタイムアウトが経過したとき、または指定した CancellationToken が取り消しを要求したときに完了する Task を取得します。

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

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

WaitAsync(TimeSpan, TimeProvider)

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

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

この Task<TResult> が完了したとき、指定したタイムアウトが経過したとき、または指定した CancellationToken が取り消しを要求したときに完了する Task<TResult> を取得します。

WaitAsync(TimeSpan, TimeProvider, CancellationToken)

この Task が完了したとき、指定したタイムアウトが経過したとき、または指定した CancellationToken が取り消しを要求したときに完了する Task を取得します。

(継承元 Task)

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

IAsyncResult.AsyncWaitHandle

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

(継承元 Task)
IAsyncResult.CompletedSynchronously

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

(継承元 Task)

拡張メソッド

WaitAsync(Task, TimeSpan, TimeProvider, CancellationToken)

この Task が完了したとき、指定したタイムアウトが経過したとき、または指定した CancellationToken が取り消しを要求したときに完了する Task を取得します。

WaitAsync<TResult>(Task<TResult>, TimeSpan, TimeProvider, CancellationToken)

この Task が完了したとき、指定したタイムアウトが経過したとき、または指定した CancellationToken が取り消しを要求したときに完了する Task を取得します。

DispatcherOperationWait(Task)

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

DispatcherOperationWait(Task, TimeSpan)

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

IsDispatcherOperationTask(Task)

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

AsAsyncAction(Task)

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

AsAsyncOperation<TResult>(Task<TResult>)

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

適用対象

スレッド セーフ

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

こちらもご覧ください