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)、および結合 ( when_all) と選択の幅 ( when_any) パターン。It can also be composed with other tasks using continuations( then), and join( when_all) and choice( when_any) patterns.

構文Syntax

template <typename T>
class task;

template <>
class task<void>;

template<typename _ReturnType>
class task;

パラメーターParameters

TT
タスク オブジェクトの種類。The task object type.

_ReturnType_ReturnType
このタスクの結果の型。The result type of this task.

メンバーMembers

パブリック typedefPublic Typedefs

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

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

名前Name 説明Description
tasktask オーバーロードされます。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_typevoid に指定されたタスクで呼び出された場合は値を返しません。This 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.
schedulerscheduler このタスクのスケジューラを返しますReturns the scheduler for this task
そうしたらthen オーバーロードされます。Overloaded. 継続タスクをこのタスクに追加します。Adds a continuation task to this task.
waitwait このタスクが終了状態になるまで待機します。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.

RemarksRemarks

詳細については、次を参照してください。タスクの並列化します。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_typevoid に指定されたタスクで呼び出された場合は値を返しません。This method does not return a value when called on a task with a result_type of void.

_ReturnType get() const;

void get() const;

戻り値Return Value

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

RemarksRemarks

タスクが取り消された場合に呼び出し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) アプリで呼び出さないでください::waitまたはget(wait呼び出しget) で、ユーザー インターフェイス スレッドで実行されるコード。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.

RemarksRemarks

関数は、タスクが完了した場合または取り消された場合に 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<_ReturnType>& _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=

ある 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

RemarksRemarks

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==

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

bool operator== (const task<_ReturnType>& _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 ランタイム アプリでタスクを使用している場合、: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_typetask<result_type>、または Windows ランタイム アプリでの: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.

RemarksRemarks

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. などのメソッドgetwaitまたは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 lamda that returns a task<result_type> reach their terminal state when the inner task reaches its terminal state, and not when the lamda 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.

: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,
    _ReturnType>::_TaskOfType;

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

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    cancellation_token _CancellationToken,
    task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
    _ReturnType>::_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_context。For 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.

RemarksRemarks

オーバー ロードthenラムダまたはファンクタを: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.

RemarksRemarks

重要

ユニバーサル 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 Namespace