如何在没有参数的void方法中使用std::async?

How to use std::async with void method with no parameters?

我假设 std::async 我遗漏了一些非常简单的东西。我正在尝试 运行 2 void 异步方法,没有 return 值。

#include <future>

class AsyncTestClass {

    public:
        void Initialize()
        {
            std::async(&AsyncTestClass::AsyncMethod1);
            std::async(&AsyncTestClass::AsyncMethod2);
        }

        void AsyncMethod1()
        {
            //time consuming operation
        }

        void AsyncMethod2()
        {
            //time consuming operation
        }
};

但是在 std:async:

中调用我的 AsyncMethod1AsyncMethod2 时出现错误

Substitution failed: type 'typename std:conditional<sizeof....(ArgTypes) == 0, std::_Invoke_traits_Zero<void, typename std::decay.....is ill formed with _Fty = void (AsyncTestClass::*)(), _ArgTypes =

std:asyncvoid 无参数方法的正确用法是什么?我看到的示例似乎与我使用它的方式相似,但它不适合我。

AsyncTestClass::AsyncMethod1 是一个非静态成员函数,只有在提供 AsyncTestClass 的实例时才能调用。你可能是这个意思:

std::async(&AsyncTestClass::AsyncMethod1, this)

这将创建一个 std::future 对象,其值将通过评估 this->AsyncMethod1() 获得。

对了,std::async的return值要赋值给一个变量,否则调用会阻塞。参见 std::async won't spawn a new thread when return value is not stored。如果你有 C++20,由于 [[nodiscard]].

,编译器会为你捕获这个