create_async 関数

ユーザーが指定したラムダまたは関数オブジェクトに基づいて Windows ランタイムの非同期構造を作成します。 create_async の戻り値の型は、IAsyncAction^IAsyncActionWithProgress<TProgress>^IAsyncOperation<TResult>^IAsyncOperationWithProgress<TResult, TProgress>^ のいずれかで、メソッドに渡されるラムダのシグネチャに基づいています。

template<
   typename _Function
>
__declspec(
   noinline
) auto create_async(const _Function& _Func) -> decltype(ref new details::_AsyncTaskGeneratorThunk<_Function>(_Func));

パラメーター

  • _Function

  • _Func
    Windows ランタイムの非同期構造の作成元となるラムダまたは関数オブジェクト。

戻り値

IAsyncAction^、IAsyncActionWithProgress<TProgress>^、IAsyncOperation<TResult>^、IAsyncOperationWithProgress<TResult、または TProgress>^ で表される非同期構造。 返されるインターフェイスは、関数に渡されるラムダのシグネチャによって異なります。

解説

ラムダの戻り値の型によって、構造がアクションであるか操作であるかが判別されます。

ラムダが void を返すと、アクションが作成されます。 ラムダが型 TResult の結果を返すと、TResult の操作が作成されます。

ラムダは task<TResult> を返すことがあります。この戻り値は、それ自体に非同期操作をカプセル化します。また、非同期操作を表すタスクのチェーンの継続として機能する場合もあります。 この場合、ラムダ自体はインラインで実行されます。これは、タスクが非同期的に実行されたタスクであり、ラムダの戻り値の型がラップ解除され create_async によって返される非同期構造を生成するためです。 これは、ラムダが task<void> を返すとアクションが作成され、ラムダが task<TResult> を返すと TResult の操作が作成されることを意味します。

ラムダでは、引数を使用しない場合、または 1 つか 2 つの引数を使用する場合があります。 有効な引数は progress_reporter<TProgress>cancellation_token です。これらを両方とも使用する場合は、この順序で指定してください。 ラムダで引数を使用しないと、進行状況の報告機能を持たない非同期構造が作成されます。 ラムダで progress_reporter<TProgress> を使用すると、create_async によって非同期構造が返されます。この非同期構造では、progress_reporter オブジェクトの report メソッドが呼び出されるたびに、型 TProgress の進行状況が報告されます。 cancellation_token を使用するラムダでは、そのトークンを利用して取り消しを確認する場合があります。また、作成されるタスクにこのトークンを渡す場合もあります。これにより、非同期構造を取り消すと、それらのタスクも取り消されます。

ラムダまたは関数オブジェクトの本体が結果 (task<TResult> 以外) を返す場合、ラムダは、ランタイムが暗黙的に作成するタスクのコンテキストのプロセス MTA 内で非同期的に実行されます。 IAsyncInfo::Cancel のメソッドにより、暗黙のタスクが取り消されます。

ラムダの本体がタスクを返す場合、ラムダはインラインで実行されます。また、ラムダが型 cancellation_token の引数を使用するように宣言すると、タスクの作成時にこのトークンを渡すことによって、ラムダ内で作成されるタスクの取り消しをトリガーできます。 また、トークンに対して register_callback メソッドを使用すると、生成される非同期操作や非同期アクションで IAsyncInfo::Cancel を呼び出すときに、ランタイムでコールバックを呼び出すこともできます。

この関数は、Windows ストア アプリでのみ使用できます。

必要条件

ヘッダー: ppltasks.h

名前空間: concurrency

参照

関連項目

concurrency 名前空間

task クラス

progress_reporter クラス

その他の技術情報

cancelation_token Class