簡體   English   中英

等待多個異步任務完成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM