若要檢視英文版的文章,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

create_async 函式 (C++ REST SDK)

以使用者提供的 Lambda 或函式物件為基礎,建立 Windows 執行階段非同步建構。 根據傳遞至方法的 Lambda 簽章,create_async 的傳回類型是下列其中一個:IAsyncAction^IAsyncActionWithProgress<TProgress>^IAsyncOperation<TResult>^IAsyncOperationWithProgress<TResult, TProgress>^

注意事項 警告

本主題包含 C++ REST SDK 1.0 (Codename "Casablanca") 的資訊。 如果使用 Codeplex Casablanca 網頁上的較新版本,則請使用 http://casablanca.codeplex.com/documentation 上的本機文件。

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 建立的。 您也可以在語彙基元使用 register_callback 方法,使執行階段在您在非同步作業或產生的動作呼叫 IAsyncInfo::Cancel 時叫用回呼。

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

標頭:pplxtasks.h

命名空間:pplx

參考

其他資源

cancelation_token Class
顯示: