如何将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
相关产品推荐
相关产品推荐

