packaged_task 类

描述异步提供程序,它是调用签名为 Ty(ArgTypes...) 的调用包装器。 除可能的结果外,其关联异步状态还保留可调用对象的副本。

语法

template <class>
class packaged_task;

成员

公共构造函数

名称 描述
packaged_task 构造 packaged_task 对象。
packaged_task::~packaged_task 析构函数 销毁 packaged_task 对象。

公共方法

名称 描述
get_future 返回具有相同关联异步状态的 future 对象。
make_ready_at_thread_exit 调用存储在关联异步状态中的可调用的对象,并以原子方式存储返回值。
reset 替换关联异步状态。
swap 将关联异步状态与指定对象交换。
valid 指定对象是否具有关联异步状态。

公共运算符

“属性” 描述
packaged_task::operator= 从指定对象传输关联异步状态。
packaged_task::operator() 调用存储在关联异步状态中的可调用的对象,以原子方式存储返回值,并将其状态设置为就绪
packaged_task::operator bool 指定对象是否具有关联异步状态。

要求

标头:<future>

命名空间: std

packaged_task::get_future

返回具有相同关联异步状态future<Ty> 类型的对象。

future<Ty> get_future();

备注

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

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

packaged_task::make_ready_at_thread_exit

调用存储在关联异步状态中的可调用的对象,并以原子方式存储返回值。

void make_ready_at_thread_exit(ArgTypes... args);

注解

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

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

否则,此运算符会调用 INVOKE(fn, args..., Ty),其中 fn 是存储在关联异步状态中的可调用的对象。 将任何返回值作为关联异步状态的返回结果以原子方式存储。

packaged_task::operator() 相反,在正在调用的线程中的所有线程本地对象被销毁前不会将关联的异步状态设置为 ready。 通常,在关联的异步状态上受阻的线程会受到阻止,直到正在调用的线程退出。

packaged_task::operator=

从指定的对象传输关联异步状态

packaged_task& operator=(packaged_task&& Right);

参数

Right
packaged_task 对象。

返回值

*this

注解

操作后,Right 不再具有关联异步状态。

packaged_task::operator()

调用存储在关联异步状态中的可调用的对象,以原子方式存储返回值,并将其状态设置为就绪

void operator()(ArgTypes... args);

备注

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

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

否则,此运算符会调用 INVOKE(fn, args..., Ty),其中 fn 是存储在关联异步状态中的可调用的对象。 将任何返回值作为关联异步状态的返回结果以原子方式存储,且状态设置为就绪。 结果,不再阻止在关联的异步状态上受阻的任何线程。

packaged_task::operator bool

指定对象是否具有 associated asynchronous state

operator bool() const noexcept;

返回值

如果对象有关联的异步状态,则为 true;否则为 false

packaged_task::packaged_task 构造函数

构造 packaged_task 对象。

packaged_task() noexcept;
packaged_task(packaged_task&& Right) noexcept;
template <class Fn>
   explicit packaged_task(Fn&& fn);

template <class Fn, class Alloc>
   explicit packaged_task(
      allocator_arg_t, const Alloc& alloc, Fn&& fn);

参数

Right
packaged_task 对象。

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

fn
一个函数对象。

备注

第一个构造函数构造没有关联异步状态packaged_task 对象。

第二个构造函数构造 packaged_task 对象并从 Right 传输关联异步状态。 操作后,Right 不再具有关联异步状态。

第三个构造函数构造 packaged_task 对象,该对象具有存储在其关联异步状态中的 fn 的副本。

第四个构造函数构造 packaged_task 对象(该对象具有存储在其关联异步状态中的 fn 的副本)并使用 alloc 分配内存。

packaged_task::~packaged_task 析构函数

销毁 packaged_task 对象。

~packaged_task();

备注

如果关联异步状态未就绪,则析构函数将存储具有错误代码 broken_promisefuture_error 异常作为关联异步状态中的结果,并且不再阻止在关联异步状态上受阻的任何线程。

packaged_task::reset

使用新的关联异步状态替换现有的关联异步状态。

void reset();

备注

实际上,此方法将执行 *this = packaged_task(move(fn)),其中 fn 是存储在此对象的关联异步状态中的函数对象。 因此,将清除该对象的状态,且可像在新构造的对象上一样调用 get_futureoperator()make_ready_at_thread_exit

packaged_task::swap

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

void swap(packaged_task& Right) noexcept;

参数

Right
packaged_task 对象。

packaged_task::valid

指定对象是否具有 associated asynchronous state

bool valid() const;

返回值

如果对象有关联的异步状态,则为 true;否则为 false

另请参阅

头文件引用
<future>