在当前的标准 C++中没有明确的做法.
std::future::then() 在标准化管道中,可以包含在C++ 1y或TR中.
有几个第三方库支持这个成语:
相关:Asio是一个C++异步I/O库,它支持这个习惯用于非阻塞I/O操作,而不是一般的计算操作.(Node.js主要用于I/O,所以这可能就足够了.)
否则,您可以推出自己的解决方法:
auto myFuture = std::async([](){
doWork();
}).share();
auto myNextFuture = std::async([=](){
myFuture.wait();
doMoreWork();
});
Run Code Online (Sandbox Code Playgroud)
您可以将其打包成可重用的帮助程序:
template <typename Future, typename Work>
auto after(Future f, Work w) -> std::future<decltype(w())>
{
return std::async([=]() -> decltype(w()) { f.wait(); return w(); });
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
auto myFuture = std::async([](){
doWork();
});
auto myNextFuture = after(myFuture.share(), [](){
doMoreWork();
});
Run Code Online (Sandbox Code Playgroud)
使用这种方法,您可以支付额外线程的费用(可能).
相关:Herb Sutter的C++ Concurrency谈话.
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |