async 函式
表示非同步提供者。
template<class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>;
async(Fn&& fn, ArgTypes&&... args);
template<class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>;
async(launch policy, Fn&& fn, ArgTypes&&... args);
參數
- policy
啟動 值。
備註
縮寫的定義:
dfn |
呼叫 decay_copy(forward<Fn>(fn)) 的結果。 |
dargs |
呼叫 decay_copy(forward<ArgsTypes>(args…)) 的結果。 |
Ty |
result_of<Fn(ArgTypes…)>::type類型。 |
第一個樣板函式會傳回 async(launch::any, fn, args…)。
第二個函式傳回 future<Ty> 物件,其 相關聯的非同步狀態 保存一個結果包含 dfn 的值和 dargs 及處理執行個別執行緒的執行緒物件。
除非 decay<Fn>::type 是除了啟動以外的型別,第二個函式不參與多載解析。
如果 policy 是 launch::any,函式會選取 launch::async 或 launch::deferred。 在這個實作中,函式使用 launch::async。
如果 policy 是 launch::async,函式會建立評估 INVOKE(dfn, dargs..., Ty) 的執行緒。 函式在建立執行緒且未等待結果之後傳回。 如果系統無法啟動新執行緒,函式會擲回具有 resource_unavailable_try_again錯誤碼的 system_error。
如果 policy 是 launch::deferred,函式將其相關聯的非同步狀態標示為保留延後函式並傳回。 第一個所有非計時函式 (等候關聯的非同步狀態為就緒) 的呼叫藉由評估 INVOKE(dfn, dargs..., Ty) 呼叫延後的函式。
在所有情況下,直到 INVOKE(dfn, dargs…, Ty) 的評估完成前,藉由擲回例外狀況或透過一般傳回,future 物件的相關聯的非同步狀態未設定成就緒。 被擲回的相關的非同步狀態的結果會是例外狀況或是由這項評估所傳回的任何值。
注意事項 |
---|
對於 future — 或最後一個 shared_future ── 如果工作未完成,會附加至以 std::async 開頭 (解構函式區塊) 的工作;即若執行緒未呼叫 .get() 或 .wait() 則封鎖,且工作仍在執行中。如果從 std::async 取得的 future 在區域範圍外移動,則其他程式碼使用它時必須知道其解構函式可能為了讓共用狀態變成就緒而封鎖。 |
提供 INVOKE 函式在 <functional> 中定義。
需求
標題: future
命名空間: std