task クラス (コンカレンシー ランタイム)
並列パターン ライブラリ (PPL) task
クラス。 task
オブジェクトは、非同期的に、他のタスクと同時に実行できる処理、およびコンカレンシー ランタイムの並列アルゴリズムによって生成される並列処理を表します。 正常に終了した場合は、型 _ResultType
の結果が生成されます。 型 task<void>
のタスクでは結果が作成されません。 タスクは、他のタスクと関係なく待機および取り消しできます。 また、continuations(then
)、および join(when_all
) パターンと choice(when_any
) パターンを使用して、他のタスクと共に構成することもできます。 タスク オブジェクトが新しい変数に割り当てられると、その動作は std::shared_ptr
になります。つまり、両方のオブジェクトが同じ基になるタスクを表します。
構文
template <>
class task<void>;
template<typename _ResultType>
class task;
パラメーター
_ResultType
タスクによって生成される結果の型。
メンバー
パブリック typedef
名前 | 説明 |
---|---|
result_type |
このクラスのオブジェクトによって生成される結果の型。 |
パブリック コンストラクター
名前 | 説明 |
---|---|
タスク | 過負荷です。 task オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
get | 過負荷です。 このタスクによって生成された結果を返します。 タスクが終了状態にない場合、get への呼び出しは、そのタスクが完了するまで待機します。 このメソッドは、result_type が void に指定されたタスクで呼び出された場合は値を返しません。 |
is_apartment_aware | タスクが Windows ランタイム IAsyncInfo インターフェイスをラップ解除するか、こうしたタスクの子であるかを決定します。 |
is_done | タスクが完了したかどうかを決定します。 |
スケジューラ | このタスクのスケジューラを返します |
then | 過負荷です。 継続タスクをこのタスクに追加します。 |
待機 | このタスクが終了状態になるまで待機します。 タスクの依存関係すべてが満たされ、バックグラウンド ワーカーによって実行用にまだ検出されていない場合、wait はタスクをインラインで実行できます。 |
パブリック演算子
名前 | 説明 |
---|---|
operator!= | 過負荷です。 2 つの task オブジェクトが異なる内部タスクを表すかどうかを決定します。 |
operator= | 過負荷です。 ある task オブジェクトの内容を別のオブジェクトの内容で置き換えます。 |
operator== | 過負荷です。 2 つの task オブジェクトが同じ内部タスクを表すかどうかを決定します。 |
解説
詳しくは、タスクの並列処理に関するページを参照してください。
継承階層
task
要件
ヘッダー: ppltasks.h
名前空間: concurrency
get
このタスクによって生成された結果を返します。 タスクが終了状態にない場合、get
への呼び出しは、そのタスクが完了するまで待機します。 このメソッドは、result_type
が void
に指定されたタスクで呼び出された場合は値を返しません。
_ResultType get() const;
void get() const;
戻り値
タスクの結果。
解説
タスクが取り消されると、get
の呼び出しでは task_canceled 例外がスローされます。 タスクで別の例外が発生したり、継続元タスクからこのタスクに例外が反映された場合、get
の呼び出しは、その例外をスローします。
重要
ユニバーサル Windows プラットフォーム (UWP) アプリでは、ユーザーインターフェイス スレッドで実行されるコードでconcurrency:: task:: wait または get
(wait
が get
を呼び出し) を呼び出さないでください。 そうしないと、これらのメソッドが現在のスレッドをブロックして、アプリケーションが応答しなくなる場合があるため、ランタイムは concurrency::invalid_operation をスローします。 ただし、結果は直ちに使用できるため、タスク ベースの継続で継続元タスクの結果を受け取るために get
メソッドを呼び出すことができます。
is_apartment_aware
タスクが Windows ランタイム IAsyncInfo
インターフェイスをラップ解除するか、こうしたタスクの子であるかを決定します。
bool is_apartment_aware() const;
戻り値
タスクが IAsyncInfo
インターフェイスをラップ解除するか、こうしたタスクの子である場合は true
を返します。それ以外の場合は false
を返します。
task::is_done メソッド (コンカレンシー ランタイム)
タスクが完了したかどうかを決定します。
bool is_done() const;
戻り値
タスクが完了した場合は true を返します。それ以外の場合は false を返します。
解説
関数は、タスクが完了した場合または取り消された場合に true を返します (ユーザー例外の有無は問いません)。
operator!=
2 つの task
オブジェクトが異なる内部タスクを表すかどうかを決定します。
bool operator!= (const task<_ResultType>& _Rhs) const;
bool operator!= (const task<void>& _Rhs) const;
パラメーター
_Rhs
比較するタスク。
戻り値
オブジェクトが異なる基本タスクを参照する場合は true
を返します。それ以外の場合は false
を返します。
operator=
ある task
オブジェクトの内容を別のオブジェクトの内容で置き換えます。
task& operator= (const task& _Other);
task& operator= (task&& _Other);
パラメーター
_Other
ソース task
オブジェクト。
戻り値
解説
task
がスマート ポインターのように動作すると、コピーの代入の後では、この task
オブジェクトは _Other
が実行する実際のタスクと同じタスクを表します。
operator==
2 つの task
オブジェクトが同じ内部タスクを表すかどうかを決定します。
bool operator== (const task<_ResultType>& _Rhs) const;
bool operator== (const task<void>& _Rhs) const;
パラメーター
_Rhs
比較するタスク。
戻り値
オブジェクトが同じ基本タスクを参照する場合は true
を返します。それ以外の場合は false
を返します。
task::scheduler メソッド (コンカレンシー ランタイム)
このタスクのスケジューラを返します
scheduler_ptr scheduler() const;
戻り値
スケジューラへのポインター
タスク
task
オブジェクトを構築します。
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);
パラメーター
T
パラメーターの型。これに基づいてタスクが構築されます。
_Param
パラメーター。これに基づいてタスクが構築されます。 Windows ランタイム アプリでタスクを使用する場合、ラムダ、関数オブジェクト、task_completion_event<result_type>
オブジェクト、または Windows::Foundation::IAsyncInfo を指定できます。 ラムダまたは関数オブジェクトは、std::function<X(void)>
と同等の型にする必要があります。Windows ランタイム アプリの場合、この X には、型 result_type
の変数、task<result_type>
、または Windows::Foundation::IAsyncInfo を指定できます。
_TaskOptions
タスク オプションには、キャンセル トークン、スケジューラなどがあります。
_Other
ソース task
オブジェクト。
解説
task
の既定のコンストラクターは、タスクをコンテナー内で使用できるようにすることのみを目的としています。 構築された既定のタスクは、有効なタスクを割り当てるまで使用できません。 get
、wait
、then
などのメソッドは、構築された既定のタスクで呼び出されると、invalid_argument 例外をスローします。
task_completion_event
から作成されたタスクは、タスクの完了イベントが設定されたときに完了します (その後で継続がスケジュールされます)。
キャンセル トークンを使用するバージョンのコンストラクターは、トークンの取得元となる cancellation_token_source
を使用して取り消すことができるタスクを作成します。 キャンセル トークンを使用せずに作成されたタスクは、取り消すことはできません。
Windows::Foundation::IAsyncInfo
インターフェイスまたは IAsyncInfo
インターフェイスを返すラムダから作成されたタスクは、取り込まれている Windows ランタイムの非同期操作または非同期アクションが完了すると、終了状態になります。 同様に、task<result_type>
を返すラムダから作成されたタスクは、内側のタスクが終了状態になったとき (ラムダがその状態を返すときではありません)、終了状態になります。
task
は、スマート ポインターのように動作し、安全に値渡しされます。 この task には、複数のスレッドからアクセスできます。ロックする必要はありません。
Windows::Foundation::IAsyncInfo インターフェイスまたはそのようなインターフェイスを返すラムダを使用するコンストラクターのオーバーロードは、Windows ランタイム アプリでのみ使用できます。
詳しくは、タスクの並列処理に関するページを参照してください。
と
継続タスクをこのタスクに追加します。
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;
パラメーター
_Function
このタスクによって呼び出される関数オブジェクトの型。
_Func
このタスクが完了したときに実行される継続関数。 この継続関数では、result_type
または task<result_type>
の変数を入力として使用する必要があります。result_type
は、このタスクによって生成される結果の型です。
_TaskOptions
タスク オプションには、キャンセル トークン、スケジューラ、および継続コンテキストなどがあります。 既定では、これら 3 つのオプションは継続元タスクから継承されます。
_CancellationToken
継続タスクに関連付けるキャンセル トークン。 キャンセル トークンなしで作成された継続タスクは、その継続元タスクのトークンを継承します。
_ContinuationContext
継続を実行する状況を指定する変数。 この変数は、UWP アプリで使用される場合にのみ役立ちます。 詳細については、「task_continuation_context」を参照してください
戻り値
新しく作成された継続タスク。 返されるタスクの結果の型は、_Func
が返す値によって決まります。
解説
Windows::Foundation::IAsyncInfo インターフェイスを返すラムダまたはファンクタを使用する then
のオーバーロードは、Windows ランタイム アプリでのみ使用できます。
タスクの継続を使用して非同期操作を構成する方法の詳細については、「タスクの並列化」を参照してください。
wait
このタスクが終了状態になるまで待機します。 タスクの依存関係すべてが満たされ、バックグラウンド ワーカーによって実行用にまだ検出されていない場合、wait
はタスクをインラインで実行できます。
task_status wait() const;
戻り値
task_status
の値。completed
または canceled
に設定される可能性があります。 タスクの実行時に例外が発生したり、継続元タスクからこのタスクに例外が反映された場合、wait
はその例外をスローします。
解説
重要
ユニバーサル Windows プラットフォーム (UWP) アプリでは、ユーザーインターフェイス スレッドで実行されるコードで wait
を呼び出さないでください。 そうしないと、このメソッドが現在のスレッドをブロックして、アプリケーションが応答しなくなる場合があるため、ランタイムは concurrency::invalid_operation をスローします。 ただし、タスク ベースの継続で継続元タスクの結果を受け取るために concurrency::task::get のメソッドを呼び出すことができます。