Por que o destruidor de um futuro retornou do bloqueio do `std :: async`?

Ao tentar responder outraPergunta do Stackoverflow, Percebi que esse trecho simples do C ++ 11 está bloqueando implicitamente o segmento de chamada:

std::async(std::launch::async, run_async_task)

Para mim, isso teria parecido a maneira canônica do C ++ 11 de iniciar uma tarefa de forma assíncrona, sem se importar com o resultado. Em vez disso, é necessário criar e desanexar explicitamente um segmento (consulteresponda questão mencionada) para conseguir isso.

Então, eis a minha pergunta: existe alguma razão em relação à segurança / correção que o destruidor de umstd::future tem que estar bloqueando? Não seria suficiente se ele bloquearget somente e caso contrário, se não estou interessado no valor de retorno ou exceção, é simplesmente disparar e esquecer?

questionAnswers(1)

yourAnswerToTheQuestion