promise 类

介绍异步提供程序

语法

template <class Ty>
class promise;

成员

公共构造函数

名称 描述
promise 构造 promise 对象。

公共方法

名称 描述
get_future 返回与此 promise 关联的 future
set_exception 以原子方式设置此 promise 的结果以指示异常。
set_exception_at_thread_exit 以原子方式设置此 promise 的结果以指示异常,并且仅在销毁当前线程中的所有线程本地对象后(通常在线程退出时)发出通知。
set_value 以原子方式设置此 promise 的结果以指示值。
set_value_at_thread_exit 以原子方式设置此 promise 的结果以指示值,并且仅在销毁当前线程中的所有线程本地对象后(通常在线程退出时)发出通知。
swap 用指定的 promise 对象的关联的异步状态交换此 promise 的关联的异步状态。

公共运算符

“属性” 描述
promise::operator= 此 promise 对象的共享状态的分配。

继承层次结构

promise

要求

标头:<future>

命名空间: std

promise::get_future

返回具有与此 promise 相同的关联异步状态future 对象。

future<Ty> get_future();

备注

如果 promise 对象为空,则此方法将引发一个 error_codeno_statefuture_error

如果此方法已调用具有相同关联异步状态的承诺对象,则此方法将引发 future_errorerror_codefuture_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;

参数

Al
内存分配器。 有关分配器的详细信息,请参阅 <allocators>

其他
promise 对象。

备注

第一个构造函数构造空promise对象。

第二个构造函数构造一个空 promise 对象,并使用 Al 实现内存分配。

第三个构造函数构造 promise 对象并从 Other 传输关联异步状态,同时将 Other 留空。

promise::set_exception

以原子方式将异常存储为此 promise 对象的结果,并将“关联的异步状态”设置为“就绪”

void set_exception(exception_ptr Exc);

参数

Exc
通过此方法另存为异常结果的 exception_ptr

备注

如果 promise 对象没有关联的异步状态,则此方法将引发具有错误代码 no_statefuture_error

如果已为具有相同的关联异步状态的 promise 对象调用 set_exceptionset_exception_at_thread_exitset_valueset_value_at_thread_exit,则此方法将引发具有错误代码 promise_already_satisfiedfuture_error

此方法的结果是,不再阻止在关联的异步状态上受阻的任何线程。

promise::set_exception_at_thread_exit

以原子方式设置此 promise 的结果以指示异常,并且仅在当前线程中的所有线程本地对象被销毁后(通常在线程退出时)发出通知。

void set_exception_at_thread_exit(exception_ptr Exc);

参数

Exc
通过此方法另存为异常结果的 exception_ptr

备注

如果 promise 对象没有关联的异步状态,则此方法将引发具有错误代码 no_statefuture_error

如果已为具有相同的关联异步状态的 promise 对象调用 set_exceptionset_exception_at_thread_exitset_valueset_value_at_thread_exit,则此方法将引发具有错误代码 promise_already_satisfiedfuture_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();

参数

Val
要存储为结果的值。

备注

如果 promise 对象没有关联的异步状态,则此方法将引发具有错误代码 no_statefuture_error

如果已为具有相同的关联异步状态的 promise 对象调用 set_exceptionset_exception_at_thread_exitset_valueset_value_at_thread_exit,则此方法将引发具有错误代码 promise_already_satisfiedfuture_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();

参数

Val
要存储为结果的值。

注解

如果 promise 对象没有关联的异步状态,则此方法将引发具有错误代码 no_statefuture_error

如果已为具有相同的关联异步状态的 promise 对象调用 set_exceptionset_exception_at_thread_exitset_valueset_value_at_thread_exit,则此方法将引发具有错误代码 promise_already_satisfiedfuture_error

set_value 相反,在当前线程中的所有线程本地对象被销毁前不会将关联的异步状态设置为“就绪”。 通常,在关联的异步状态上受阻的线程直到当前线程退出才会取消阻止。

第一种方法还会引发在将 Val 复制到关联的异步状态时所引发的任何异常。

第二种方法还会引发在将 Val 移动到关联的异步状态时引发的任何异常。

对于部分专用化 promise<Ty&>,存储的值实际上是对 Val 的引用。

对于专用化 promise<void>,不存在任何存储的值。

promise::swap

将此 promise 对象的关联异步状态与指定对象的交换。

void swap(promise& Other) noexcept;

参数

其他
promise 对象。

另请参阅

头文件引用