task クラス (コンカレンシー ランタイム)task Class (Concurrency Runtime)

並列パターン ライブラリ (PPL) task クラス。The Parallel Patterns Library (PPL) task class. オブジェクトは、 task 他のタスクと同時に実行できる作業、および同時実行ランタイムの並列アルゴリズムによって生成される並列処理を表します。A task object represents work that can be executed asynchronously and concurrently with other tasks and parallel work produced by parallel algorithms in the Concurrency Runtime. 正常に終了した場合は、型 _ResultType の結果が生成されます。It produces a result of type _ResultType on successful completion. task<void> のタスクでは結果が作成されません。Tasks of type task<void> produce no result. タスクは、他のタスクと関係なく待機および取り消しできます。A task can be waited upon and canceled independently of other tasks. また、継続 ( then )、join ()、choice () の各パターンを使用して、他のタスクで構成することもでき when_all when_any ます。It can also be composed with other tasks using continuations( then), and join( when_all) and choice( when_any) patterns. タスクオブジェクトが新しい変数に割り当てられると、の動作はになります std::shared_ptr 。つまり、両方のオブジェクトが同じ基になるタスクを表します。When a task object is assigned to a new variable, the behavior is that of std::shared_ptr; in other words, both objects represent the same underlying task.

構文Syntax

template <>
class task<void>;

template<typename _ResultType>
class task;

パラメーターParameters

_ResultType_ResultType
タスクによって生成される結果の型。The type of the result that the task produces.

メンバーMembers

パブリック typedefPublic Typedefs

名前Name 説明Description
result_type このクラスのオブジェクトによって生成される結果の型。The type of the result an object of this class produces.

パブリック コンストラクターPublic Constructors

名前Name 説明Description
タスクtask オーバーロードされます。Overloaded. task オブジェクトを構築します。Constructs a task object.

パブリック メソッドPublic Methods

名前Name 説明Description
getget オーバーロードされます。Overloaded. このタスクによって生成された結果を返します。Returns the result this task produced. タスクが終了状態にない場合、get への呼び出しは、そのタスクが完了するまで待機します。If the task is not in a terminal state, a call to get will wait for the task to finish. このメソッドは、のを持つタスクで呼び出された場合、値を返しません result_type voidThis method does not return a value when called on a task with a result_type of void.
is_apartment_awareis_apartment_aware タスクが Windows ランタイム IAsyncInfo インターフェイスをラップ解除するか、こうしたタスクの子であるかを決定します。Determines whether the task unwraps a Windows Runtime IAsyncInfo interface or is descended from such a task.
is_doneis_done タスクが完了したかどうかを決定します。Determines if the task is completed.
組むscheduler このタスクのスケジューラを返しますReturns the scheduler for this task
そうしたらthen オーバーロードされます。Overloaded. 継続タスクをこのタスクに追加します。Adds a continuation task to this task.
待機wait このタスクが終了状態になるまで待機します。Waits for this task to reach a terminal state. タスクの依存関係すべてが満たされ、バックグラウンド ワーカーによって実行用にまだ検出されていない場合、wait はタスクをインラインで実行できます。It is possible for wait to execute the task inline, if all of the tasks dependencies are satisfied, and it has not already been picked up for execution by a background worker.

パブリック演算子Public Operators

名前Name 説明Description
operator! =operator!= オーバーロードされます。Overloaded. 2 つの task オブジェクトが異なる内部タスクを表すかどうかを決定します。Determines whether two task objects represent different internal tasks.
operator =operator= オーバーロードされます。Overloaded. ある task オブジェクトの内容を別のオブジェクトの内容で置き換えます。Replaces the contents of one task object with another.
operator = =operator== オーバーロードされます。Overloaded. 2 つの task オブジェクトが同じ内部タスクを表すかどうかを決定します。Determines whether two task objects represent the same internal task.

解説Remarks

詳細については、「タスクの並列化」を参照してください。For more information, see Task Parallelism.

継承階層Inheritance Hierarchy

task

必要条件Requirements

ヘッダー: ppltasks.hHeader: ppltasks.h

名前空間: concurrencyNamespace: concurrency

取得get

このタスクによって生成された結果を返します。Returns the result this task produced. タスクが終了状態にない場合、get への呼び出しは、そのタスクが完了するまで待機します。If the task is not in a terminal state, a call to get will wait for the task to finish. このメソッドは、のを持つタスクで呼び出された場合、値を返しません result_type voidThis method does not return a value when called on a task with a result_type of void.

_ResultType get() const;

void get() const;

戻り値Return Value

タスクの結果。The result of the task.

解説Remarks

タスクが取り消された場合、を呼び出すと get task_canceled例外がスローされます。If the task is canceled, a call to get will throw a task_canceled exception. タスクで別の例外が発生したり、継続元タスクからこのタスクに例外が反映された場合、get の呼び出しは、その例外をスローします。If the task encountered an different exception or an exception was propagated to it from an antecedent task, a call to get will throw that exception.

重要

ユニバーサル Windows プラットフォーム (UWP) アプリでは、 concurrency::task::wait get wait get ユーザーインターフェイススレッドで実行されるコードで concurrency:: task:: wait または (calls) を呼び出さないでください。In a Universal Windows Platform (UWP) app, do not call concurrency::task::wait or get ( wait calls get) in code that runs on the user-interface thread. それ以外の場合、ランタイムはconcurrency:: invalid_operationをスローします。これらのメソッドは、現在のスレッドをブロックし、アプリが応答しなくなる可能性があるためです。Otherwise, the runtime throws concurrency::invalid_operation because these methods block the current thread and can cause the app to become unresponsive. ただし、結果は直ちに使用できるため、タスク ベースの継続で継続元タスクの結果を受け取るために get メソッドを呼び出すことができます。However, you can call the get method to receive the result of the antecedent task in a task-based continuation because the result is immediately available.

is_apartment_awareis_apartment_aware

タスクが Windows ランタイム IAsyncInfo インターフェイスをラップ解除するか、こうしたタスクの子であるかを決定します。Determines whether the task unwraps a Windows Runtime IAsyncInfo interface or is descended from such a task.

bool is_apartment_aware() const;

戻り値Return Value

true タスクがインターフェイスのラップを解除した場合 IAsyncInfo 、またはそのようなタスクからの子孫である場合は false 。それ以外の場合は。true if the task unwraps an IAsyncInfo interface or is descended from such a task, false otherwise.

task:: is_done メソッド (同時実行ランタイム)task::is_done Method (Concurrency Runtime)

タスクが完了したかどうかを決定します。Determines if the task is completed.

bool is_done() const;

戻り値Return Value

タスクが完了した場合は true を返します。それ以外の場合は false を返します。True if the task has completed, false otherwise.

解説Remarks

関数は、タスクが完了した場合または取り消された場合に true を返します (ユーザー例外の有無は問いません)。The function returns true if the task is completed or canceled (with or without user exception).

operator! =operator!=

2 つの task オブジェクトが異なる内部タスクを表すかどうかを決定します。Determines whether two task objects represent different internal tasks.

bool operator!= (const task<_ResultType>& _Rhs) const;

bool operator!= (const task<void>& _Rhs) const;

パラメーターParameters

_Rhs_Rhs
比較するタスク。The task to compare.

戻り値Return Value

true オブジェクトが別の基になるタスクを参照している場合は false 。それ以外の場合は。true if the objects refer to different underlying tasks, and false otherwise.

operator =operator=

ある task オブジェクトの内容を別のオブジェクトの内容で置き換えます。Replaces the contents of one task object with another.

task& operator= (const task& _Other);

task& operator= (task&& _Other);

パラメーターParameters

_Other_Other
ソース task オブジェクト。The source task object.

戻り値Return Value

解説Remarks

task がスマート ポインターのように動作すると、コピーの代入の後では、この task オブジェクトは _Other が実行する実際のタスクと同じタスクを表します。As task behaves like a smart pointer, after a copy assignment, this task objects represents the same actual task as _Other does.

operator = =operator==

2 つの task オブジェクトが同じ内部タスクを表すかどうかを決定します。Determines whether two task objects represent the same internal task.

bool operator== (const task<_ResultType>& _Rhs) const;

bool operator== (const task<void>& _Rhs) const;

パラメーターParameters

_Rhs_Rhs
比較するタスク。The task to compare.

戻り値Return Value

true オブジェクトが同じ基になるタスクを参照している場合は false 。それ以外の場合は。true if the objects refer to the same underlying task, and false otherwise.

task:: scheduler メソッド (同時実行ランタイム)task::scheduler Method (Concurrency Runtime)

このタスクのスケジューラを返しますReturns the scheduler for this task

scheduler_ptr scheduler() const;

戻り値Return Value

スケジューラへのポインターA pointer to the scheduler

タスクtask

task オブジェクトを構築します。Constructs a task object.

task();

template<typename T>
__declspec(
    noinline) explicit task(T _Param);

template<typename T>
__declspec(
    noinline) explicit task(T _Param, const task_options& _TaskOptions);

task(
    const task& _Other);

task(
    task&& _Other);

パラメーターParameters

TT
パラメーターの型。これに基づいてタスクが構築されます。The type of the parameter from which the task is to be constructed.

_Param_Param
パラメーター。これに基づいてタスクが構築されます。The parameter from which the task is to be constructed. task_completion_event<result_type>Windows ランタイムアプリでタスクを使用している場合は、ラムダ、関数オブジェクト、オブジェクト、または Windows:: Foundation:: IAsyncInfo のいずれかになります。This could be a lambda, a function object, a task_completion_event<result_type> object, or a Windows::Foundation::IAsyncInfo if you are using tasks in your Windows Runtime app. ラムダまたは関数オブジェクトは、に相当する型である必要があり std::function<X(void)> ます。ここで、X は、型、型、 result_type task<result_type> または Windows ランタイムアプリの Windows:: Foundation:: iasyncinfo の変数になります。The lambda or function object should be a type equivalent to std::function<X(void)>, where X can be a variable of type result_type, task<result_type>, or a Windows::Foundation::IAsyncInfo in Windows Runtime apps.

_TaskOptions_TaskOptions
タスク オプションには、キャンセル トークン、スケジューラなどがあります。The task options include cancellation token, scheduler etc

_Other_Other
ソース task オブジェクト。The source task object.

解説Remarks

task の既定のコンストラクターは、タスクをコンテナー内で使用できるようにすることのみを目的としています。The default constructor for a task is only present in order to allow tasks to be used within containers. 構築された既定のタスクは、有効なタスクを割り当てるまで使用できません。A default constructed task cannot be used until you assign a valid task to it. get、、などのメソッドは、 wait then 構築された既定のタスクで呼び出されるとinvalid_argument例外をスローします。Methods such as get, wait or then will throw an invalid_argument exception when called on a default constructed task.

task_completion_event から作成されたタスクは、タスクの完了イベントが設定されたときに完了します (その後で継続がスケジュールされます)。A task that is created from a task_completion_event will complete (and have its continuations scheduled) when the task completion event is set.

キャンセル トークンを使用するバージョンのコンストラクターは、トークンの取得元となる cancellation_token_source を使用して取り消すことができるタスクを作成します。The version of the constructor that takes a cancellation token creates a task that can be canceled using the cancellation_token_source the token was obtained from. キャンセル トークンを使用せずに作成されたタスクは、取り消すことはできません。Tasks created without a cancellation token are not cancelable.

Windows::Foundation::IAsyncInfo インターフェイスまたは IAsyncInfo インターフェイスを返すラムダから作成されたタスクは、取り込まれている Windows ランタイムの非同期操作または非同期アクションが完了すると、終了状態になります。Tasks created from a Windows::Foundation::IAsyncInfo interface or a lambda that returns an IAsyncInfo interface reach their terminal state when the enclosed Windows Runtime asynchronous operation or action completes. 同様に、を返すラムダから作成されたタスクは、 task<result_type> 内部タスクがそのターミナル状態に達したときに、ラムダがを返すときではなく、ターミナル状態に到達します。Similarly, tasks created from a lambda that returns a task<result_type> reach their terminal state when the inner task reaches its terminal state, and not when the lambda returns.

task は、スマート ポインターのように動作し、安全に値渡しされます。task behaves like a smart pointer and is safe to pass around by value. この task には、複数のスレッドからアクセスできます。ロックする必要はありません。It can be accessed by multiple threads without the need for locks.

Windows:: Foundation:: IAsyncInfo インターフェイスを受け取るコンストラクターオーバーロード、またはこのようなインターフェイスを返すラムダは、Windows ランタイムアプリでのみ使用できます。The constructor overloads that take a Windows::Foundation::IAsyncInfo interface or a lambda returning such an interface, are only available to Windows Runtime apps.

詳細については、「タスクの並列化」を参照してください。For more information, see Task Parallelism.

そうしたらthen

継続タスクをこのタスクに追加します。Adds a continuation task to this task.

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func) const -> typename details::_ContinuationTypeTraits<_Function,
    _ResultType>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    const task_options& _TaskOptions) const -> typename details::_ContinuationTypeTraits<_Function,
    _ResultType>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    cancellation_token _CancellationToken,
    task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
    _ResultType>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    const task_options& _TaskOptions = task_options()) const -> typename details::_ContinuationTypeTraits<_Function,
    void>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    cancellation_token _CancellationToken,
    task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
    void>::_TaskOfType;

パラメーターParameters

_Function_Function
このタスクによって呼び出される関数オブジェクトの型。The type of the function object that will be invoked by this task.

_Func_Func
このタスクが完了したときに実行される継続関数。The continuation function to execute when this task completes. この継続関数では、result_type または task<result_type> の変数を入力として使用する必要があります。result_type は、このタスクによって生成される結果の型です。This continuation function must take as input a variable of either result_type or task<result_type>, where result_type is the type of the result this task produces.

_TaskOptions_TaskOptions
タスク オプションには、キャンセル トークン、スケジューラ、および継続コンテキストなどがあります。The task options include cancellation token, scheduler and continuation context. 既定では、これら 3 つのオプションは継続元タスクから継承されます。By default the former 3 options are inherited from the antecedent task

_CancellationToken_CancellationToken
継続タスクに関連付けるキャンセル トークン。The cancellation token to associate with the continuation task. キャンセル トークンなしで作成された継続タスクは、その継続元タスクのトークンを継承します。A continuation task that is created without a cancellation token will inherit the token of its antecedent task.

_ContinuationContext_ContinuationContext
継続を実行する状況を指定する変数。A variable that specifies where the continuation should execute. この変数は、UWP アプリで使用される場合にのみ役立ちます。This variable is only useful when used in a UWP app. 詳細については、「」を参照してくださいtask_continuation_contextFor more information, see task_continuation_context

戻り値Return Value

新しく作成された継続タスク。The newly created continuation task. 返されるタスクの結果の型は、_Func が返す値によって決まります。The result type of the returned task is determined by what _Func returns.

解説Remarks

thenWindows:: Foundation:: IAsyncInfo インターフェイスを返すラムダまたはファンクタを受け取るのオーバーロードは、Windows ランタイムアプリでのみ使用できます。The overloads of then that take a lambda or functor that returns a Windows::Foundation::IAsyncInfo interface, are only available to Windows Runtime apps.

タスクの継続を使用して非同期作業を構成する方法の詳細については、「タスクの並列化」を参照してください。For more information on how to use task continuations to compose asynchronous work, see Task Parallelism.

待機wait

このタスクが終了状態になるまで待機します。Waits for this task to reach a terminal state. タスクの依存関係すべてが満たされ、バックグラウンド ワーカーによって実行用にまだ検出されていない場合、wait はタスクをインラインで実行できます。It is possible for wait to execute the task inline, if all of the tasks dependencies are satisfied, and it has not already been picked up for execution by a background worker.

task_status wait() const;

戻り値Return Value

task_status の値。completed または canceled に設定される可能性があります。A task_status value which could be either completed or canceled. タスクの実行時に例外が発生したり、継続元タスクからこのタスクに例外が反映された場合、wait はその例外をスローします。If the task encountered an exception during execution, or an exception was propagated to it from an antecedent task, wait will throw that exception.

解説Remarks

重要

ユニバーサル Windows プラットフォーム (UWP) アプリでは、 wait ユーザーインターフェイススレッドで実行されるコードでを呼び出さないでください。In a Universal Windows Platform (UWP) app, do not call wait in code that runs on the user-interface thread. そうしないと、このメソッドが現在のスレッドをブロックして、アプリケーションが応答しなくなる場合があるため、ランタイムは concurrency::invalid_operation をスローします。Otherwise, the runtime throws concurrency::invalid_operation because this method blocks the current thread and can cause the app to become unresponsive. ただし、タスク ベースの継続で継続元タスクの結果を受け取るために concurrency::task::get のメソッドを呼び出すことができます。However, you can call the concurrency::task::get method to receive the result of the antecedent task in a task-based continuation.

関連項目See also

concurrency 名前空間concurrency Namespace