[英]Wait for multiple async tasks to complete
我正在啟動幾個異步任務,如下所示:
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();
我從這個鏈接看到等待多個未來? 還沒有等待多個期貨。
有什么技巧可以用來查看我的所有任務是否已完成?
我可以將每個未來存儲在數組或向量中並依次等待每個未來嗎?
您可以使用 std::shared_future 的(可以復制的)或 vector::emplace_back() 來放置無法復制但可以移動的 std::futures 。
解決此問題的一個簡單方法是將shared_ptr<collector>
傳遞給所有異步函數。 讓這些異步函數調用collector::collect(...)
將其數據傳遞給收集器。 一旦所有異步函數返回, collector
對象將被自動刪除。 現在使用析構函數collector::~collector()
作為所有異步函數已完成的通知。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.