Ho codice così:È sicuro tornare dalla funzione prima che tutti std :: future siano finiti?
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;
}
}
Posso ritorno dalla funzione quando ci sono le chiamate asincrone non finiti? Mi interessa solo un valore diverso da zero. Devo aspettare fino a quando tutte le chiamate asincrone sono finite? Questo codice è sicuro?
Che cosa significa "sicuro"? –
Intendo crash, comportamento indefinito o qualcosa del genere. Voglio solo ottenere il valore non zero e ignorare gli altri. Voglio che il mio programma si comporti sempre così. In altre parole: ci sono pericoli in questo codice? Non so cosa succederà quando le altre chiamate asincrone saranno finite e il "vettore" dei futures non esisterà. – peter55555
Il tuo programma non ha un comportamento indefinito. Ma potrebbe bloccare il completamento di tutte le operazioni asincrone prima di tornare. –