この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語
このドキュメントはアーカイブされており、メンテナンスされていません。

Task クラス

非同期操作を表します。

名前空間:  System.Threading.Tasks
アセンブリ:  mscorlib (mscorlib.dll 内)

[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class Task : IAsyncResult, IDisposable

Task 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドTask(Action)指定したアクションで新しい Task を初期化します。
パブリック メソッドTask(Action, CancellationToken)指定したアクションと CancellationToken で新しい Task を初期化します。
パブリック メソッドTask(Action, TaskCreationOptions)指定したアクションと作成オプションで新しい Task を初期化します。
パブリック メソッドTask(Action<Object>, Object)指定したアクションと状態で新しい Task を初期化します。
パブリック メソッドTask(Action, CancellationToken, TaskCreationOptions)指定したアクションと作成オプションで新しい Task を初期化します。
パブリック メソッドTask(Action<Object>, Object, CancellationToken)指定したアクション、状態、およびオプションで新しい Task を初期化します。
パブリック メソッドTask(Action<Object>, Object, TaskCreationOptions)指定したアクション、状態、およびオプションで新しい Task を初期化します。
パブリック メソッドTask(Action<Object>, Object, CancellationToken, TaskCreationOptions)指定したアクション、状態、およびオプションで新しい Task を初期化します。
このページのトップへ

  名前説明
パブリック プロパティAsyncState Task が作成されたときに渡される状態オブジェクトを取得します。渡されなかった場合は null。
パブリック プロパティCreationOptionsこのタスクの作成に使用される TaskCreationOptions を取得します。
パブリック プロパティ静的メンバーCurrentId現在実行中の Task の一意の ID を返します。
パブリック プロパティException Task が途中で終了する原因となった AggregateException を取得します。 Task が正常に完了した場合、または例外がスローされていない場合は、null が返されます。
パブリック プロパティ静的メンバーFactory Task インスタンスおよび Task<TResult> インスタンスを作成するためのファクトリ メソッドにアクセスできるようにします。
パブリック プロパティIdこの Task インスタンスの一意の ID を取得します。
パブリック プロパティIsCanceledこの Task インスタンスの実行が取り消されることによって完了したかどうかを示す値を取得します。
パブリック プロパティIsCompletedこの Task が完了したかどうかを示す値を取得します。
パブリック プロパティIsFaultedハンドルされない例外が発生したことが原因で Task が完了したかどうかを示す値を取得します。
パブリック プロパティStatusこのタスクの TaskStatus を取得します。
このページのトップへ

  名前説明
パブリック メソッドContinueWith(Action<Task>)ターゲットの Task が完了したときに非同期に実行する継続タスクを作成します。
パブリック メソッドContinueWith(Action<Task>, CancellationToken)ターゲットの Task が完了したときに非同期に実行する継続タスクを作成します。
パブリック メソッドContinueWith(Action<Task>, TaskContinuationOptions)指定した TaskContinuationOptions に従って実行する継続タスクを作成します。
パブリック メソッドContinueWith(Action<Task>, TaskScheduler)ターゲットの Task が完了したときに非同期に実行する継続タスクを作成します。
パブリック メソッドContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)指定した TaskContinuationOptions に従って実行する継続タスクを作成します。
パブリック メソッドContinueWith<TResult>(Func<Task, TResult>)ターゲットの Task が完了したときに非同期に実行する継続タスクを作成します。
パブリック メソッドContinueWith<TResult>(Func<Task, TResult>, CancellationToken)ターゲットの Task が完了したときに非同期に実行する継続タスクを作成します。
パブリック メソッドContinueWith<TResult>(Func<Task, TResult>, TaskContinuationOptions) continuationOptions で指定した条件に従って実行する継続タスクを作成します。
パブリック メソッドContinueWith<TResult>(Func<Task, TResult>, TaskScheduler)ターゲットの Task が完了したときに非同期に実行する継続タスクを作成します。
パブリック メソッドContinueWith<TResult>(Func<Task, TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) continuationOptions で指定した条件に従って実行する継続タスクを作成します。
パブリック メソッドDispose() Task クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。
プロテクト メソッドDispose(Boolean) Task を破棄し、そのすべてのアンマネージ リソースを解放します。
パブリック メソッドEquals(Object)指定した Object が、現在の Object と等しいかどうかを判断します。 (Object から継承されます。)
プロテクト メソッドFinalize オブジェクトがガベージ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッドGetHashCode特定の型のハッシュ関数として機能します。 (Object から継承されます。)
パブリック メソッドGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
プロテクト メソッドMemberwiseClone 現在の Object の浅いコピーを作成します。 (Object から継承されます。)
パブリック メソッドRunSynchronously()現在の TaskSchedulerTask を同期的に実行します。
パブリック メソッドRunSynchronously(TaskScheduler)指定した TaskSchedulerTask を同期的に実行します。
パブリック メソッドStart()現在の TaskSchedulerTask の実行をスケジュールし、それを開始します。
パブリック メソッドStart(TaskScheduler)指定した TaskScheduler に対して Task の実行をスケジュールし、それを開始します。
パブリック メソッドToString 現在のオブジェクトを表す文字列を返します。 (Object から継承されます。)
パブリック メソッドWait() Task の実行が完了するまで待機します。
パブリック メソッドWait(CancellationToken) Task の実行が完了するまで待機します。
パブリック メソッドWait(Int32) Task の実行が完了するまで待機します。
パブリック メソッドWait(TimeSpan) Task の実行が完了するまで待機します。
パブリック メソッドWait(Int32, CancellationToken) Task の実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAll(Task[])指定したすべての Task オブジェクトの実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAll(Task[], Int32)指定したすべての Task オブジェクトの実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAll(Task[], CancellationToken)指定したすべての Task オブジェクトの実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAll(Task[], TimeSpan)指定したすべての Task オブジェクトの実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAll(Task[], Int32, CancellationToken)指定したすべての Task オブジェクトの実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAny(Task[])指定したいずれかの Task オブジェクトの実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAny(Task[], Int32)指定したいずれかの Task オブジェクトの実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAny(Task[], CancellationToken)指定したいずれかの Task オブジェクトの実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAny(Task[], TimeSpan)指定したいずれかの Task オブジェクトの実行が完了するまで待機します。
パブリック メソッド静的メンバーWaitAny(Task[], Int32, CancellationToken)指定したいずれかの Task オブジェクトの実行が完了するまで待機します。
このページのトップへ

  名前説明
明示的なインターフェイス実装プライベート プロパティIAsyncResult.AsyncWaitHandleタスクの完了を待機するために使用できる WaitHandle を取得します。
明示的なインターフェイス実装プライベート プロパティIAsyncResult.CompletedSynchronously操作が同期的に完了したかどうかを示す値を取得します。
このページのトップへ

Task インスタンスは、さまざまな方法で作成されます。 最も一般的なアプローチは、タスクの種類の Factory プロパティを使用して、いくつかの目的のタスクを作成するために使用できる TaskFactory インスタンスを取得することです。 たとえば、アクションを実行する Task を作成するには、ファクトリの StartNew メソッドを使用できます。

// C#
var t = Task.Factory.StartNew(() => DoAction());

' Visual Basic
 Dim t = Task.Factory.StartNew(Function() DoAction())

この例より完全なコード例については、「タスクの並列化 (タスク並列ライブラリ)」を参照してください。

Task クラスは、タスクを初期化しますが、その実行をスケジュールしないコンストラクターも提供します。 パフォーマンス上の理由から、TaskFactory の StartNew メソッドが計算タスクを作成およびスケジュールするために優先される機構ですが、作成とスケジューリングを分離する必要があるシナリオでは、コンストラクターを使用してから、タスクの Start メソッドを使用して、後で実行するようにタスクをスケジュールすることができます。

値を返す操作の場合は、Task<TResult> クラスを使用する必要があります。

デバッガーの開発者向け

カスタム デバッガーを実装する開発者の場合は、タスクのいくつかの内部およびプライベート メンバーが便利なことがあります (これらはリリースごとに変わります)。 Int32 m_taskId フィールドは、Id プロパティのバッキング ストアとして機能しますが、デバッガーから直接このフィールドにアクセスする方が、プロパティの getter メソッドを通じて同じ値にアクセスする (s_taskIdCounter Int32 カウンターを使用して、タスクの次に使用可能な ID を取得します) よりも効率的な場合があります。 同様に、Int32 m_stateFlags フィールドには、タスク現在のライフ サイクル段階についての情報が格納されます。この情報には、Status プロパティを通じてもアクセスできます。 m_action System.Object フィールドにはタスクのデリゲートへの参照が格納され、m_stateObject System.Object フィールドには開発者がタスクに渡す非同期状態が格納されます。 最後に、スタック フレームを解析するデバッガーの場合、InternalWait メソッドはタスクが待機操作に入るときの潜在的なマーカーとして機能します。

メモメモ

この型またはメンバーに適用される HostProtectionAttribute 属性の Resources プロパティの値は、Synchronization | ExternalThreading です。 HostProtectionAttribute は、デスクトップ アプリケーション (通常、アイコンのダブルクリック、コマンドの入力、またはブラウザーへの URL の入力により起動されます) には影響しません。 詳細については、HostProtectionAttribute クラスのトピックまたは「SQL Server プログラミングとホスト保護属性」を参照してください。

次の例に、StartNew() メソッドを使用してタスクを開始する方法を示します。


using System;
using System.Threading;
using System.Threading.Tasks;

class StartNewDemo
{
    // Demonstrated features:
    //		Task ctor()
    // 		Task.Factory
    //		Task.Wait()
    //		Task.RunSynchronously()
    // Expected results:
    // 		Task t1 (alpha) is created unstarted.
    //		Task t2 (beta) is created started.
    //		Task t1's (alpha) start is held until after t2 (beta) is started.
    //		Both tasks t1 (alpha) and t2 (beta) are potentially executed on threads other than the main thread on multi-core machines.
    //		Task t3 (gamma) is executed synchronously on the main thread.
    // Documentation:
    //		http://msdn.microsoft.com/en-us/library/system.threading.tasks.task_members(VS.100).aspx
    static void Main()
    {
        Action<object> action = (object obj) =>
        {
            Console.WriteLine("Task={0}, obj={1}, Thread={2}", Task.CurrentId, obj.ToString(), Thread.CurrentThread.ManagedThreadId);
        };

        // Construct an unstarted task
        Task t1 = new Task(action, "alpha");

        // Cosntruct a started task
        Task t2 = Task.Factory.StartNew(action, "beta");

        // Block the main thread to demonstate that t2 is executing
        t2.Wait();

        // Launch t1 
        t1.Start();

        Console.WriteLine("t1 has been launched. (Main Thread={0})", Thread.CurrentThread.ManagedThreadId);

        // Wait for the task to finish.
        // You may optionally provide a timeout interval or a cancellation token
        // to mitigate situations when the task takes too long to finish.
        t1.Wait();

        // Construct an unstarted task
        Task t3 = new Task(action, "gamma");

        // Run it synchronously
        t3.RunSynchronously();

        // Although the task was run synchrounously, it is a good practice to wait for it which observes for 
        // exceptions potentially thrown by that task.
        t3.Wait();
    }


}


.NET Framework

サポート対象: 4

.NET Framework Client Profile

サポート対象: 4

Windows 7, Windows Vista SP1 以降, Windows XP SP3, Windows Server 2008 (Server Core はサポート対象外), Windows Server 2008 R2 (SP1 以降で Server Core をサポート), Windows Server 2003 SP2

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。 サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

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

表示: