std::experimental::future<T>::then
template< class F > future</* see below */> then( F&& func ) ; |
||
将延续 func 附加到 *this。如果 *this 没有关联的共享状态(即,valid() == false),则行为未定义。
创建一个与要返回的 future
对象关联的共享状态,以及一个作为 DECAY_COPY(std::forward<F>(func)) 使用在调用 then
的线程中评估的方式构造的 fd 的副本,其中 DECAY_COPY 定义为
template<class T> std::decay_t<T> DECAY_COPY(T&& v) { return std::forward<T>(v); } |
当与 *this 当前关联的共享状态准备就绪时,延续 INVOKE(std::move(fd), std::move(*this)) 在一个未指定的执行线程上被调用,其中 INVOKE 是在 Callable 中定义的操作。如果该表达式无效,则行为未定义。
从延续返回的任何值都作为结果存储在返回的 future
对象的共享状态中。从延续的执行中传播的任何异常都作为异常结果存储在返回的 future
对象的共享状态中。
令 U
为延续的返回类型(即 std::result_of_t<std::decay_t<F>(std::experimental::future<T>)>)。如果 U
是 std::experimental::future<T2>,其中 T2
是某种类型,则 then
的返回类型是 std::experimental::future<T2>,否则它是 std::experimental::future<U>。这被称为隐式解包。
如果隐式解包发生,并且延续返回了一个无效的 future
,则共享状态将准备好具有类型为 std::future_error 且错误条件为 std::future_errc::broken_promise 的异常。
此函数返回后,valid() 为 false。
[编辑] 参数
func | - | 要附加的延续 |
[编辑] 返回值
一个与此对象创建的共享状态关联的 std::experimental::future 对象。对于返回的对象,valid() == true。
[编辑] 示例
此部分不完整 原因:没有示例 |