在所有 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
语句将在所有任务完成之前完成。
我有这样的代码:
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
语句将在所有任务完成之前完成。