C++ future、promise 与 async:接收后台结果,也接住后台异常

发布时间:2026/11/15 0:23:28

C++ future、promise 与 async:接收后台结果,也接住后台异常 C future、promise 与 async接收后台结果也接住后台异常启动线程只是并发任务的一半另一半是把结果或失败传回来。future 负责接收共享状态中的结果promise 负责显式提供结果async 则把任务启动与结果通道组合起来。最低标准C14示例使用初始化捕获。示例显式使用 launch::async不依赖默认启动策略。1. 两种交付结果的方式#includeexception#includefuture#includeiostream#includestdexcept#includethread#includeutilityintsquare(intx){if(x0)throwstd::runtime_error(negative input);returnx*x;// 本例仅传入 -1通用函数需额外处理乘法溢出}intmain(){autotaskstd::async(std::launch::async,square,-1);try{std::couttask.get()\n;}catch(conststd::exceptione){std::coute.what()\n;}std::promiseintproducer;autoresultproducer.get_future();std::threadworker([pstd::move(producer)]()mutable{try{p.set_value(42);}catch(...){p.set_exception(std::current_exception());}});worker.join();std::coutresult.get()\n;}future、promise 和 async 工具本身自 C11 提供本例使用 C14 的初始化捕获来转移 promise。输出为 negative input 和 42。async 任务的异常保存在共享状态里在 get 时重新抛出promise 也可以通过 set_exception 把工作线程的异常传回接收端。2. get 与 wait 不是一回事wait 等到共享状态就绪但不取出结果也不负责把任务异常重新抛出。get 等待并取得结果或者抛出保存的异常。普通 future 的 get 会消耗关联状态之后不能再重复 get。需要多个接收者重复观察同一结果时可以研究 shared_future但它不自动让结果指向的可变对象线程安全。3. 默认 async 不保证马上开线程不指定策略时实现可以选择异步执行或延迟执行。使用 launch::async 可以明确要求异步方式但资源不足仍可能让任务启动失败需要按实际场景处理异常。来自 async 的 future 在特定条件下销毁时可能等待任务结束。因此把返回的 future 当成临时对象直接丢弃可能让本以为并行的多次调用变成串行等待。应保存 future并在合适的位置统一接收结果。4. promise 是一次性交付通道同一个共享状态不能随意重复 set_value 或 set_exception。若提供者在交付前销毁接收端可能得到 broken_promise 错误。通道不是队列不适合反复传递多条消息。示例先 join 再 get确保本地线程正常结束后才处理结果。实际代码若把可能抛异常的操作放在 join 之前还需要用 RAII 管理线程防止异常路径留下 joinable 的 thread。异步不等于可以无限创建任务。任务很多时要限制并发量并设计取消、超时和退出流程这些能力不能仅靠一个 future 自动获得。
延伸阅读

更多相关文章

2026/11/15 0:23:27

脸容易红,先修护还是先就医?

先把暂停、转诊和复核条件问清楚,再讨论项目。脸容易红时,先排除近期明显刺激和需要专业评估的信号,再决定短期观察、基础护理还是医美咨询。最容易花错钱的地方不是价格,而是把尚未分流的问题直接当成“修护需求”。“修护”两个…

2026/11/15 0:23:27

【Python】数据类型转换、函数与文件操作

【Python】数据类型转换、函数与文件操作(初步认识学习) 前两周我们已经初步学习了python的字符串,列表,字典的日常和内置函数的使用方法: 在这里总结一下Python的数据类型: 字符串类型 String 数字类型 Nu…

2026/11/15 0:22:51

电工证还要复审嘛今年 低学历也能考 证书含金量怎么体现

电工证还要复审嘛今年 低学历也能考 证书含金量怎么体现 你是不是也担心自己学历不高,连电工证都报不上名?别急,今天咱们就来聊聊 电工证还要复审嘛今年 这个事,还有怎么选培训机构,怎么确保证书的 含金量…

2026/11/15 0:22:51

丽江低压电工证多少钱?郑州报考避坑指南这样看

丽江低压电工证多少钱?郑州报考避坑指南这样看 实操考试心里没底怕挂科?丽江低压电工证多少钱,考前没搞明白流程和标准,反而花了冤枉钱还白搭时间。很多人以为低压电工证只是个门槛证,其实它背后藏着不少门道,尤其是像郑州这样的城市,报考流程、合格标…

2026/11/15 0:22:51

老个电工证需要多少钱,过期了别慌,复审流程全在这儿

老个电工证需要多少钱,过期了别慌,复审流程全在这儿 证书过期了不知道怎么复审延期,这事儿真让人头疼。特别是像你这种在商丘市政公用工程一线干了多年的电工,天天跟电打交道,突然间证书到期了,不仅影响日常工作,还可能面临项目停工甚至被追责的风险。…

2026/11/15 0:22:51

办理登高证电工证贵阳需要什么材料

贵阳登高证电工证怎么考?实操考试心里没底怕挂科?官方报名入口全攻略 实操考试心里没底怕挂科,这是大多数打算报考登高证和电工证的人心里的真实想法,尤其是贵阳地区的三门峡房建工程从业者,更是在施工现场天天与高空作业打交道,安全风险高,证书考不好…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑