task 類別 (並行執行階段)

平行模式程式庫 (PPL) task 類別。 task物件代表可以非同步和並存執行的工作,以及並行執行時間中平行演算法所產生的其他工作和平行工作。 成功完成時,會產生 _ResultType 類型的結果。 task<void> 類型的工作不會產生任何結果。 工作可以獨立於其他工作,個別等候及取消。 它也可以使用接續()和聯結( then )和選擇( when_allwhen_any )模式,與其他工作組成。 當工作物件指派給新的變數時,行為就是 std::shared_ptr 的 ;換句話說,這兩個物件都代表相同的基礎工作。

語法

template <>
class task<void>;

template<typename _ResultType>
class task;

參數

_ResultType
工作產生的結果型別。

成員

公用 Typedefs

名稱 描述
result_type 此類別物件所產生的結果類型。

公用建構函式

名稱 描述
任務 已多載。 建構 task 物件。

公用方法

名稱 描述
get 已多載。 傳回這個工作產生的結果。 如果工作不在終止狀態,則呼叫 get 將會等候工作完成。 在 result_typevoid 的工作上被呼叫時,這個方法不會傳回值。
is_apartment_aware 判斷工作是否解除包裝 Windows 執行階段 IAsyncInfo 介面或是從這類工作繼承而來。
is_done 判定工作是否完成。
調度 傳回此工作的排程器
然後 已多載。 將接續工作加入至此工作。
等候這個工作到達終止狀態。 如果符合所有的工作相依性,而且未經選取供背景工作執行,則 wait 可以執行內嵌工作。

公用運算子

名稱 描述
operator!= 已多載。 判斷兩個 task 物件是否表示不同的內部工作。
operator= 已多載。 將某個 task 物件的內容取代為另一個物件的內容。
operator== 已多載。 判斷兩個 task 物件是否表示相同的內部工作。

備註

如需詳細資訊,請參閱 工作平行處理原則

繼承階層架構

task

需求

標頭: ppltasks.h

命名空間: concurrency

get

傳回這個工作產生的結果。 如果工作不在終止狀態,則呼叫 get 將會等候工作完成。 在 result_typevoid 的工作上被呼叫時,這個方法不會傳回值。

_ResultType get() const;

void get() const;

傳回值

工作的結果。

備註

如果取消工作,對 get 的呼叫將會擲回 task_canceled 例外狀況。 如果工作發生不同的例外狀況,或例外狀況從前項工作傳播至它,則呼叫 get 將會擲回該例外狀況。

重要

在通用 Windows 平臺 (UWP) 應用程式中,請勿在使用者介面執行緒上執行的程式碼中呼叫 concurrency::task::wait getwait calls get )。 否則,執行時間會 擲回並行::invalid_operation ,因為這些方法會封鎖目前的執行緒,並可能導致應用程式變得沒有回應。 不過,您可以呼叫 get 方法,以接收工作型接續中前項工作的結果,因為結果會立即可用。

is_apartment_aware

判斷工作是否解除包裝 Windows 執行階段 IAsyncInfo 介面或是從這類工作繼承而來。

bool is_apartment_aware() const;

傳回值

true 如果工作解除包裝 IAsyncInfo 介面或從這類工作遞減,則為 , false 否則為 。

task::is_done 方法 (並行執行時間)

判定工作是否完成。

bool is_done() const;

傳回值

如果工作已完成,則為 True,否則為 false。

備註

如果工作已完成或取消,則函式會傳回 true(無論使用者例外狀況或沒有例外狀況)。

operator!=

判斷兩個 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);

參數

_其他
來源 task 物件。

傳回值

備註

由於 task 的表現就像智慧型指標,因此在複製指派之後,這個 task 物件和 _Other 一樣,都表示相同的實際工作。

operator==

判斷兩個 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
從中要建構工作的參數的類型。

_參數
從中要建構工作的參數。 如果您使用Windows 執行階段應用程式中的工作,這可能是 Lambda、函式物件、 task_completion_event<result_type> 物件或 Windows::Foundation::IAsyncInfo。 Lambda 或函式物件應該是相當於 std::function<X(void)> 的類型,其中 X 可以是 、 類型的 result_typetask<result_type> 變數,或 Windows 執行階段 應用程式中的 Windows::Foundation::IAsyncInfo。

_TaskOptions
工作選項包括取消語彙基元、排程器等等

_其他
來源 task 物件。

備註

出現 task 的預設建構函式,只是為了讓工作在容器內使用。 只有在指派有效的工作給預設建構的工作之後,您才能使用它。 在預設建構工作上呼叫 時, waitthen 之類的 get 方法會擲回 invalid_argument 例外狀況。

task_completion_event 建立的工作,會在設定工作完成事件後完成 (並排定其接續作業)。

接受取消語彙基元的建構函式版本,會建立可以透過使用 cancellation_token_source (語彙基元取得來源) 取消的工作。 在沒有取消語彙基元的情況下建立的工作,無法取消。

Windows::Foundation::IAsyncInfo 介面或從傳回 IAsyncInfo 介面的 Lambda 建立的工作,當內含的 Windows 執行階段非同步作業或動作完成時,該工作會到達其終止狀態。 同樣地,從 Lambda 建立的工作會在內部工作到達其終端狀態時傳回 task<result_type> 其終端狀態,而不是當 Lambda 傳回時到達其終端狀態。

task 的行為就像智慧型指標,可透過傳值方式安全傳遞。 它可以由多個執行緒存取,而不需要鎖定。

採用 Windows::Foundation::IAsyncInfo 介面或傳回這類介面的 Lambda 的建構函式多載僅適用于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;

參數

_功能
此工作會叫用的函式物件的類型。

_Func
當這個工作完成時執行的接續函式。 這個接續函式必須接受 result_typetask<result_type> 的變數做為輸入,其中 result_type 是這個工作所產生結果的類型。

_TaskOptions
工作選項包括取消語彙基元、排程器和接續內容。 前 3 個選項預設會從前項工作繼承

_CancellationToken
要與接續工作產生關聯的取消語彙基元。 所建立不含取消語彙基元的接續工作將會繼承其前項工作的語彙基元。

_ContinuationCoNtext
指定執行接續作業位置的變數。 只有在 UWP 應用程式中使用時,這個變數才有用。 如需詳細資訊,請參閱 task_continuation_coNtext

傳回值

新建立的接續工作。 所傳回工作的結果類型取決於 _Func 傳回哪些項目。

備註

的多載 then 會採用傳回 Windows::Foundation::IAsyncInfo 介面的 Lambda 或 functor,僅適用于Windows 執行階段應用程式。

如需如何使用工作接續撰寫非同步工作的詳細資訊,請參閱 工作平行處理原則

wait

等候這個工作到達終止狀態。 如果符合所有的工作相依性,而且未經選取供背景工作執行,則 wait 可以執行內嵌工作。

task_status wait() const;

傳回值

可能是 task_statuscompletedcanceled 值。 如果工作在執行時發生例外狀況,或例外狀況從前項工作傳播至它,則 wait 將會擲回該例外狀況。

備註

重要

在通用 Windows 平臺 (UWP) 應用程式中,請勿在使用者介面執行緒上執行的程式碼中呼叫 wait 。 否則,因為這個方法會封鎖目前的執行緒,而且可能會導致應用程式沒有回應,所以執行階段會擲回 concurrency::invalid_operation 。 不過,您可以呼叫 concurrency::task::get 方法來以工作為基礎連續的形式接收前項工作的結果。

另請參閱

concurrency 命名空間