我有这样的代码:
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;
}
}
当有未完成的异步调用时,我可以从函数返回吗?我只对一个非零值感兴趣。我应该等到所有异步调用完成吗?这段代码安全吗?
答案 0 :(得分:7)
std::future
的析构函数(从调用std::async
初始化时)阻塞,直到异步任务完成。 (See here)
因此,在完成所有任务之前,您的函数return
语句将无法完成。