在所有std ::期货结束之前从函数返回是否安全?

时间:2016-04-19 23:25:07

标签: c++ c++11 asynchronous future

我有这样的代码:

int function()
{
    std::vector<std::future<int>> futures;
    for (const auto& elem : elements)
    {
        futures.push_back(std::async(&MyClass::foo, myClass, elem);
    }
    for (auto& f : futures)
    {
        const int x = f.get();
        if (x != 0)
            return x;
    }
}

当有未完成的异步调用时,我可以从函数返回吗?我只对一个非零值感兴趣。我应该等到所有异步调用完成吗?这段代码安全吗?

1 个答案:

答案 0 :(得分:7)

std::future的析构函数(从调用std::async初始化时)阻塞,直到异步任务完成。 (See here

因此,在完成所有任务之前,您的函数return语句将无法完成。

相关问题