2

我正在启动几个异步任务,如下所示:

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

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

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

4

2 回答 2

0

您可以使用 std::shared_future's(可以复制)或 vector::emplace_back() 来放置无法复制但可以移动的 std::futures'。

于 2015-05-18T19:13:41.323 回答
0

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

于 2020-08-10T20:03:52.083 回答