Task<TResult> クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
値を返すことができる非同期操作を表します。
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> 、値を返し、通常は非同期的に実行される 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 が正常に完了した場合、または例外がスローされていない場合は、 |
Factory |
インスタンスを作成および構成 Task<TResult> するためのファクトリ メソッドを取得します。 |
Id |
この Task インスタンスの ID を取得します。 (継承元 Task) |
IsCanceled |
この Task インスタンスの実行が取り消されることによって完了したかどうかを示す値を取得します。 (継承元 Task) |
IsCompleted |
タスクが完了したかどうかを示す値を取得します。 (継承元 Task) |
IsCompletedSuccessfully |
タスクが完了まで実行されたかどうかを示す値を取得します。 (継承元 Task) |
IsFaulted |
処理されない例外が発生したことが原因で Task が完了したかどうかを示す値を取得します。 (継承元 Task) |
Result |
この Task<TResult> の結果値を取得します。 |
Status |
このタスクの TaskStatus を取得します。 (継承元 Task) |
メソッド
明示的なインターフェイスの実装
IAsyncResult.AsyncWaitHandle |
タスクの完了を待機するために使用できる WaitHandle を取得します。 (継承元 Task) |
IAsyncResult.CompletedSynchronously |
操作が同期的に完了したかどうかを示す値を取得します。 (継承元 Task) |
拡張メソッド
DispatcherOperationWait(Task) |
基になる DispatcherOperation が完了するまで無期限に待機します。 |
DispatcherOperationWait(Task, TimeSpan) |
基になる DispatcherOperation が完了するまで、指定された時間待機します。 |
IsDispatcherOperationTask(Task) |
この Task が DispatcherOperation に関連付けられているかどうかを示す値を返します。 |
AsAsyncAction(Task) |
開始されたタスクを表す Windows ランタイム非同期アクションを返します。 |
AsAsyncOperation<TResult>(Task<TResult>) |
結果を返す開始されたタスクを表す Windows ランタイム非同期操作を返します。 |
適用対象
スレッド セーフ
を除く Dispose()すべてのTask<TResult>メンバーはスレッド セーフであり、複数のスレッドから同時に使用できます。
こちらもご覧ください
フィードバック
フィードバックの送信と表示