promise 類別
描述「非同步提供者」。
語法
template <class Ty>
class promise;
成員
公用建構函式
名稱 | 描述 |
---|---|
承諾 | 建構 promise 物件。 |
公用方法
名稱 | 描述 |
---|---|
get_future | 傳回與這項承諾相關聯的 future。 |
set_exception | 以不可部分完成的方式設定這項承諾的結果以指出例外狀況。 |
set_exception_at_thread_exit | 以不可部分完成的方式設定這項承諾的結果以指出例外狀況,而且只有在目前執行緒中所有執行緒區域物件已終結後 (通常是在執行緒結束) 傳遞通知。 |
set_value | 以不可部分完成的方式設定這項承諾的結果以指出值。 |
set_value_at_thread_exit | 以不可部分完成的方式設定這項承諾的結果以指出值,而且只有在目前執行緒中所有執行緒區域物件已終結後 (通常是在執行緒結束) 傳遞通知。 |
swap | 交換這個承諾與指定之承諾物件的「相關聯非同步狀態」。 |
公用運算子
名稱 | 描述 |
---|---|
promise::operator= | 這個承諾物件共用狀態的指派。 |
繼承階層架構
承諾
需求
標頭:<future>
命名空間:std
promise::get_future
傳回 future 物件,它具有和這個承諾相同的「相關聯非同步狀態」。
future<Ty> get_future();
備註
如果承諾物件是空的,這個方法會擲回 error_code 為 no_state
的 future_error。
如果已經針對具有同一個相關聯的非同步狀態的承諾物件呼叫這個方法,方法會擲回 future_error
為 error_code
的 future_already_retrieved
。
promise::operator=
從指定的 promise
物件轉移「相關聯非同步狀態」。
promise& operator=(promise&& Other) noexcept;
參數
其他
promise
物件。
傳回值
*this
備註
這個運算符會從 Other 傳輸相關聯的異步狀態。 傳輸之後,Other 是空的。
promise::promise 建構函式
建構 promise
物件。
promise();
template <class Alloc>
promise(allocator_arg_t, const Alloc& Al);
promise(promise&& Other) noexcept;
參數
鋁
記憶體配置器。 如需配置器的詳細資訊,請參閱配置器>。<
其他
promise
物件。
備註
第一個建構函式會建構空promise
的物件。
第二個建構函式會建構空 promise
的物件,並使用 Al 進行記憶體配置。
第三個promise
建構函式會建構 物件,並從 Other 傳輸相關聯的異步狀態,並將 Other 保留空白。
promise::set_exception
以不可部分完成的方式將例外狀況儲存為此 promise
物件的結果,並將「相關聯非同步狀態」設定為「就緒」。
void set_exception(exception_ptr Exc);
參數
Exc
由這個方法儲存為例外狀況結果的 exception_ptr。
備註
如果 promise
物件沒有相關聯非同步狀態,則這個方法會擲回含有 no_state
錯誤碼的 future_error。
如果已經針對具有同一個相關聯非同步狀態的 promise
物件呼叫set_exception
、set_exception_at_thread_exit、set_value 或 set_value_at_thread_exit,則這個方法會擲回含有 promise_already_satisfied
錯誤碼的 future_error
。
由於此方法的緣故,封鎖於相關聯非同步狀態上的任何執行緒會解除封鎖。
promise::set_exception_at_thread_exit
以不可部分完成方式設定這個 promise
的結果以指出例外狀況,而且只有在目前執行緒中所有執行緒區域物件已終結後 (通常是在執行緒結束) 傳遞通知。
void set_exception_at_thread_exit(exception_ptr Exc);
參數
Exc
由這個方法儲存為例外狀況結果的 exception_ptr。
備註
如果 promise 物件沒有「相關聯非同步狀態」,則這個方法會擲回含有 no_state
錯誤碼的 future_error。
如果已經針對具有同一個相關聯非同步狀態的 promise
物件呼叫 set_exception、set_exception_at_thread_exit
、set_value 或 set_value_at_thread_exit,則這個方法會擲回含有 promise_already_satisfied
錯誤碼的 future_error
。
與set_exception相反,此方法不會將相關聯的異步狀態設定為就緒,直到目前線程中的所有線程區域物件都終結為止。 一般而言,在目前線程結束之前,在相關聯的異步狀態上封鎖的線程不會解除封鎖。
promise::set_value
以不可部分完成的方式將值儲存為此 promise
物件的結果,並將「相關聯非同步狀態」設定為「就緒」。
void promise::set_value(const Ty& Val);
void promise::set_value(Ty&& Val);
void promise<Ty&>::set_value(Ty& Val);
void promise<void>::set_value();
參數
瓦爾
要儲存為結果的值。
備註
如果 promise
物件沒有相關聯非同步狀態,則這個方法會擲回含有 no_state
錯誤碼的 future_error。
如果已經針對具有同一個相關聯非同步狀態的 promise
物件呼叫set_exception、set_exception_at_thread_exit、set_value
或 set_value_at_thread_exit,則這個方法會擲回含有 promise_already_satisfied
錯誤碼的 future_error
。
由於此方法的緣故,封鎖於相關聯非同步狀態上的任何執行緒會解除封鎖。
第一個方法也會擲回當 Val 複製到相關聯的異步狀態時所擲回的任何例外狀況。 在此情況下,相關聯的異步狀態未設定為就緒。
第二個方法也會擲回當 Val 移至相關聯異步狀態時所擲回的任何例外狀況。 在此情況下,相關聯的異步狀態未設定為就緒。
對於部分特製化promise<Ty&>
,預存值實際上就是 Val 的參考。
對於特製化的 promise<void>
,儲存值不存在。
promise::set_value_at_thread_exit
以不可部分完成的方式將值儲存為此 promise
物件的結果。
void promise::set_value_at_thread_exit(const Ty& Val);
void promise::set_value_at_thread_exit(Ty&& Val);
void promise<Ty&>::set_value_at_thread_exit(Ty& Val);
void promise<void>::set_value_at_thread_exit();
參數
瓦爾
要儲存為結果的值。
備註
如果 promise 物件沒有「相關聯非同步狀態」,則這個方法會擲回含有 no_state
錯誤碼的 future_error。
如果已經針對具有同一個相關聯非同步狀態的 promise
物件呼叫 set_exception、set_exception_at_thread_exit、set_value 或 set_value_at_thread_exit
,則這個方法會擲回含有 promise_already_satisfied
錯誤碼的 future_error
。
與相反 set_value
地,在目前線程中的所有線程區域對象終結之前,相關聯的異步狀態不會設定為就緒。 一般而言,在目前線程結束之前,在相關聯的異步狀態上封鎖的線程不會解除封鎖。
第一個方法也會擲回當 Val 複製到相關聯的異步狀態時所擲回的任何例外狀況。
第二個方法也會擲回當 Val 移至相關聯異步狀態時所擲回的任何例外狀況。
針對部分特製化promise<Ty&>
,預存值實際上是 Val 的參考。
對於特製化的 promise<void>
,儲存值不存在。
promise::swap
交換這個承諾物件與指定之物件的「相關聯非同步狀態」。
void swap(promise& Other) noexcept;
參數
其他
promise
物件。