Я столкнулся с ситуацией, когда было бы неплохо запустить операцию std::async
полностью асинхронно.
future<void> MyClass::MyAsyncFunc() {
std::future<void> f = std::async(...);
return f;
} // The future goes out of scope, will block.
Проблема в том, что функция будет блокироваться в конце, если я не сохраню будущее. Я бы хотел, чтобы этого не произошло.
Это помешало бы std::future
вызвать его деструктор в конце области действия:
shared_ptr<future<void>> MyClass::MyAsyncFunc() {
auto shared_ftr = std::make_shared<std::future<void>>();
*shared_ftr = std::async([shared_ftr]() {...});
return shared_ftr;
}
Может ли это работать? Что происходит, когда я не сохраняю результат в переменной?