在所有 std::futures 完成之前从函数 return 安全吗?

Is it safe to return from function before all std::futures are finished?

我有这样的代码:

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;
    }
}

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

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

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