У меня есть подобный код:Можно ли вернуться из функции до того, как все std :: фьючерсы закончены?
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;
}
}
Может ли я вернуться из функции, когда есть незаконченные асинхронные вызовы? Меня интересует только одно ненулевое значение. Должен ли я ждать завершения всех асинхронных вызовов? Безопасен ли этот код?
Что означает «безопасный»? –
Я имею в виду крах, неопределенное поведение или что-то в этом роде. Я просто хочу получить первое ненулевое значение и игнорировать другие. Я хочу, чтобы моя программа всегда вела себя так. Другими словами - существуют ли какие-либо опасности в этом коде? Я не знаю, что произойдет, когда другие асинхронные вызовы будут завершены, а 'vector' фьючерсов не будет существовать. – peter55555
Ваша программа не имеет неопределенного поведения. Но он может заблокировать выполнение всех асинхронных операций перед возвратом. –