Gdy próbuje odpowiedzieć na kolejną Stackoverflow question, zdałem sobie sprawę, że to proste C++ 11 urywek jest domyślnie blokuje wywołującego wątku:Dlaczego destruktor przyszłości powrócił z blokowania `std :: async`?
std::async(std::launch::async, run_async_task)
Dla mnie byłoby to wydawało kanonicznej C++ 11 sposób, aby uruchomić zadanie asynchronicznie bez dbania o wynik. Zamiast tego trzeba wyraźnie utworzyć i odłączyć wątek (patrz answer na wymienione pytanie), aby to osiągnąć.
Oto moje pytanie: czy istnieje jakikolwiek powód, dla bezpieczeństwa/poprawności, że destruktor std::future
musi być blokowany? Czy to nie wystarczy, jeśli blokuje się tylko na get
, a poza tym, jeśli nie jestem zainteresowany wartością zwracaną lub wyjątkiem, to po prostu ogień i zapomnieć?
Po prostu odpowiedziałeś na swój komentarz, a tutaj masz pytanie lol – texasbruce
Było dużo dyskusji na temat tego zachowania. Zapoznaj się z następującymi dokumentami: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3773.pdf i http://www.open-std.org/jtc1/ sc22/wg21/docs/papers/2013/n3776.pdf – nosid
@texasbruce: Tak, ponieważ to naprawdę mnie nęka. Byłem pewien, że jest to * nowy sposób C++ 11y i naprawdę byłem zaskoczony, że blokuje to, nawet jeśli nie zależy mi na wyniku (wspomniano tylko w jednej notatce na końcu). O ile nie ma takiej potrzeby, nie sądzę, żeby to był dobry interfejs. –