如何为返回async结果的函数指定函数签名

How to specify function signature for function that returns result of async?

本文关键字:函数 结果 返回 async      更新时间:2023-10-16

我有一个函数可以做到这一点:

??? createThread(int x) {
   return async(std::launch::async, 
      [x] () { // do stuff with x });
}

我正在使用VS 2012(部分C++11)。返回类型应该是什么才能进行编译?

您的函数返回一个std::future<void>:异步函数调用的未来结果。

然而,使用std::launch::async策略返回从std::async调用返回的future是非常糟糕的做法,因为这样的future的析构函数可能会阻塞,并且标准库的用户通常不希望标准库析构函数会阻塞。Cf.[futures.async]/4:

[注意:如果从std::async获得的future被移到本地作用域之外,则使用future的其他代码必须知道,future的析构函数可能会阻止共享状态变为就绪。--结束注释]