If we destroy async objects before completion we get
“Attempted destruction of AsyncWork before work has completed, terminating the program.”
Therefore I must save in application all the sent request objects.
(Answering your question: I don’t consume the output of these (isend) messages)
( of course, the receiver calls wait() before consuming)
I’m using MPI (cuda-aware openmpi), with async p2p messages.
The goal is simple

send tons of isend messages,
get memory freed automatically on each completion
finally, wait() on all the isends at the end of the program.