create_async 函式

以使用者提供的 Lambda 或函式物件為基礎,建立 Windows 執行階段非同步建構。 根據傳遞至方法的 Lambda 簽章,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 執行階段非同步建構的 Lambda 或函式物件。

傳回值

由 IAsyncAction^、IAsyncActionWithProgress<TProgress>^、IAsyncOperation<TResult>^ 或 IAsyncOperationWithProgress<TResult, TProgress>^ 表示的非同步建構。 傳回的介面依賴傳遞至函式的 Lambda 簽章。

備註

Lambda 的傳回類型決定建構是動作或作業。

傳回 void 的 Lambda 造成動作的建立。 傳回屬於類型 TResult 之結果的 Lambda 會造成 TResult 作業的建立。

Lambda 可能也會傳回 task<TResult>,將非同步工作封裝在本身內或是表示非同步工作的工作鏈結的接續。 在這種情況下, Lambda 本身是執行的內嵌,因為工作是非同步執行的工作,而且 Lambda 的傳回類型會解除包裝以產生 create_async所傳回的非同步建構。 這表示傳回 task<void> 的 Lambda 會導致動作的建立,而傳回 task<TResult> 的 Lambda 會造成 TResult 作業的建立。

Lambda 可以接受零個、一個或兩個引數。 有效的引數為 progress_reporter<TProgress>cancellation_token,使用兩者時依此順序。 沒有引數的 Lambda 會導致建立沒有進度報告功能的非同步建構。 接受 progress_reporter<TProgress> 的 Lambda 會使 create_async 傳回非同步建構,這個建構會在每次呼叫 progress_reporter 物件的 report 方法時,報告屬於類型 TProgress 的進度。 接受 cancellation_token 的 Lambda 可能使用該語彙基元來檢查取消的狀態,或是將語彙基元傳遞給所建立的工作,讓非同步建構的取消導致這些工作的取消。

如果 Lambda 或函式物件的主體傳回結果 (而非 task<TResult>),則會在執行階段隱含為其建立之工作的內容的處理序 MTA 中非同步執行 Lambda。 IAsyncInfo::Cancel 方法會導致隱含工作的取消。

如果 Lambda 的主體傳回工作,則 Lambda 會執行內嵌,而且藉由宣告 Lambda 接受屬於類型 cancellation_token 的引數,您可以觸發任何工作的取消,這些工作是您建立工作時,透過傳入該語彙基元,在 Lambda 建立的。 您可以在語彙基元使用 IAsyncInfo::Cancel 方法使執行階段在您在非同步作業或產生的動作呼叫 register_callback 時叫用回呼。

這個函式只供 Windows 市集應用程式使用。

需求

**標頭:**ppltasks.h

**命名空間:**concurrency

請參閱

參考

concurrency 命名空間

task 類別

progress_reporter 類別

其他資源

cancelation_token Class