std::async是C++11引入的轻量级异步机制,返回future用于取结果或等待;支持async(新线程立即执行)和deferred(调用get/wait时同步执行)策略,默认由实现决定,建议显式指定。

std::async 是 C++11 引入的轻量级异步启动机制,用来“扔一个任务去后台跑”,并立即返回一个 std::future 对象,用于后续取结果或等待完成。它不直接管理线程,而是由运行时决定是新开线程执行,还是延迟到 future.wait()/get() 时才同步执行(取决于 launch 策略)。
基本用法:启动异步任务并获取结果
最常用形式是传入可调用对象(函数、lambda、bind 等)和参数,返回 future:
#include <future>
#include <iostream>
<p>int compute(int x) { return x <em> x + 2 </em> x + 1; }</p><p>int main() {
// 启动异步计算,auto 推导为 std::future<int>
auto fut = std::async(std::launch::async, compute, 5);</p><pre class="brush:php;toolbar:false;">// 做其他事……
std::cout << "busy work...\n";
// 阻塞等待结果(若未完成),然后取值
int result = fut.get(); // 输出 36(5² + 2×5 + 1)
std::cout << "result = " << result << "\n";登录后复制
}
立即学习“C++免费学习笔记(深入)”;
注意:fut.get() 只能调用一次;调用后 future 失效;若任务抛异常,get() 会重新抛出。
两种 launch 策略:async vs deferred
std::launch 是枚举类型,控制任务何时/如何执行:
标签: 懒加载 ai c++ ios stream 并发编程 异步任务 red
还木有评论哦,快来抢沙发吧~