You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C#中运行void方法的异步Task代码转换为C++对应实现

错误原因

你写的代码中,Popupmessage("Hi")会被直接同步执行,将执行的返回值(void类型,不符合std::async的参数要求)传入函数,因此无法正常运行。std::async要求传入可调用对象以及该对象需要的参数,不能直接传入函数执行后的结果。

正确实现代码

和C#的匿名函数写法逻辑完全对应的C++版本如下,你可以直接参考:

#include <future> // 需要先引入std::async对应的头文件

// 异步启动任务的代码
auto taskA = std::async(std::launch::async, []() {
    Popupmessage("Hi");
});

也可以直接把函数和参数分开传入,写法更简洁:

auto taskA = std::async(std::launch::async, Popupmessage, "Hi");
注意事项
  • 如果你不对std::async返回的std::future对象进行保存,临时future对象析构时会阻塞当前线程直到异步任务执行完毕,失去异步运行的效果,因此必须把返回值用变量接住。
  • 如果你后续需要等待异步任务执行完成,可以调用taskA.wait();如果需要获取返回值(此处你的函数是void无返回值,不需要)可以调用taskA.get()。

内容的提问来源于stack exchange,提问作者Nenntron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:45:00