等待多个异步任务完成

时间:2015-05-18 18:25:13

标签: c++ multithreading stdasync

我正在开始几个异步任务,如下:

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?看到,还没有等待多个期货。

我可以使用任何技巧来查看我的所有任务是否都已完成?

我可以将每个未来存储在数组或向量中并依次等待每个未来吗?

2 个答案:

答案 0 :(得分:0)

你可以使用std :: shared_future(可以复制)或vector :: emplace_back()来强制std :: futures'无法复制,但可以移动。

答案 1 :(得分:0)

解决此问题的一种简单方法是将shared_ptr<collector>传递给所有异步函数。让这些异步函数调用collector::collect(...)以将其数据传递给收集器。一旦所有异步函数返回,collector对象将被自动删除。现在,使用析构函数collector::~collector()作为所有异步功能已完成的通知。