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
一个 launch 值.
备注
缩写的定义:
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)的线程. 函数在创建一个无需等待结果的线程后返回。 如果系统不启动一个新线程, 函数会抛出一个 system_error 有错误代码resource_unavailable_try_again.
如果 policy 是 launch::deferred, 函数标记与它关联异步状态保持 deferred function 然后返回. 对任何等待关联的异步状态的非定时函数的第一次调用需要通过评估 INVOKE(dfn, dargs..., Ty)来调用延迟函数.
在任何情况下, future 对象的异步关联状态 不设置 ready 直到 INVOKE(dfn, dargs…, Ty) 评估完成, 通过抛出一个异常或正常返回实现. 如果一个或被计算返回的任何值被抛弃,则该关联的异步状态的结果是个例外。
备注
对于一个future—或最后的 shared_future—附上从 std::async开始的任务, 析构函数块如果任务尚未完成;也就是说,如果此线程没有调用 .get() 它就会阻塞或 .wait() ,任务仍在进行.如果一个future 从 std::async 中获得移出区域范围, 使用它的其他代码必须意识到,它的析构函数可能阻塞共享状态准备就绪.
伪函数 INVOKE 定义在 <functional>中.
要求
标头: future
命名空间: std