【发布时间】:2016-04-19 23:25:06
【问题描述】:
我有这样的代码:
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;
}
}
当有未完成的异步调用时,我可以从函数返回吗?我只对一个非零值感兴趣。我应该等到所有异步调用都完成吗?这段代码安全吗?
【问题讨论】:
-
“安全”是什么意思?
-
我的意思是崩溃、未定义的行为或类似的东西。我只想获得第一个非零值并忽略其他值。我希望我的程序总是这样。换句话说 - 这段代码有什么危险吗?我不知道当其他异步调用完成并且
vectorof futures 将不存在时会发生什么。 -
您的程序没有未定义的行为。但它可能会在返回之前阻塞所有异步操作的完成。
-
std::future的析构函数阻塞直到异步任务完成 (see here) -
@KerrekSB 可能吗?必须。 (不符合标准的编译器除外)
标签: c++ c++11 asynchronous future