我正在开始几个异步任务,如下:
for(UINT Id: myIds)
{
std::async([=]
{
DoSomeStuffUsingId(Id);
return true;
});
}
我有一个功能,需要知道所有这些任务是否已经完成:
void SomeFunction()
{
if (all async tasks have completed)
{
do something else
}
}
我知道我可以等待异步任务:
std::future<bool> fut = std::async (do something);
fut.wait();
我从这个链接Waiting for multiple futures?看到,还没有等待多个期货。
我可以使用任何技巧来查看我的所有任务是否都已完成?
我可以将每个未来存储在数组或向量中并依次等待每个未来吗?
答案 0 :(得分:0)
你可以使用std :: shared_future(可以复制)或vector :: emplace_back()来强制std :: futures'无法复制,但可以移动。
答案 1 :(得分:0)
解决此问题的一种简单方法是将shared_ptr<collector>
传递给所有异步函数。让这些异步函数调用collector::collect(...)
以将其数据传递给收集器。一旦所有异步函数返回,collector
对象将被自动删除。现在,使用析构函数collector::~collector()
作为所有异步功能已完成的通知。