當試圖回答另一個Stackoverflow question,我意識到,這簡單的C++ 11的代碼段隱含阻塞調用線程:爲什麼從`std :: async`返回的未來的析構函數被阻塞?
std::async(std::launch::async, run_async_task)
對我來說這會是十分規範的C++ 11發射任務的方式異步而不關心結果。相反,人們必須明確地創建和分離一個線程(參見提到的問題answer)以實現此目的。
所以這裏是我的問題:是否有任何安全/正確性的原因,std::future
的析構函數必須被阻止?如果僅僅阻止get
,那麼它是不夠的,否則,如果我對返回值或例外不感興趣,它只是失火而忘了?
剛剛回復了你的評論,在這裏你有一個問題大聲笑 – texasbruce
關於這種行爲有很多討論。查看以下文檔:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3773.pdf和http://www.open-std.org/jtc1/ sc22/wg21/docs/papers/2013/n3776.pdf – nosid
@texasbruce:是的,因爲它真的讓我感到困擾。我確信這是*新的C++ 11y方法,即使我不關心結果(最後只在一個註釋中提到),我也很驚訝地發現它阻塞了。除非有明確的必要性,否則我認爲它不是一個好的界面。 –