История изменений
Исправление voipdev, (текущая версия) :
теперь кажется понял
все зависит от того КАК вы реализуете функцию async_receive и ее возвращаемый авейтор
потому как даже в приведенном вами псевдокоде auto receive_op = async_receive(queue);
она может не делать ничего, кроме возвращение авейтора
и некий мифический if(random) return никак не повлияет на очередь
потому что все состоятся только в use(co_await receive_op)
или реализовать в функции и забор сообщения, а потом уже возвращение авейтора
но тогда нужно делать RAII на receive_op что бы при мифическом if(random) return
сообщение закинуть обратно в очередь (т.е. в деструкторе receive_op)
а иначе да, оно будет утеряно
но возвращать авейтор в переменной рассчитывая на то что пользователь сам далее сделает co_await на переменной по моему мнения очень НЕ приятно в использовании
зы нюансы с забором сообщения по итогу, что бы в деструкторе оно опять не вернулось по кругу, я опущу, это само собой разумеется
Исходная версия voipdev, :
теперь кажется понял
все зависит от того КАК вы реализуете функцию async_receive и ее возвращаемый авейтор
потому как даже в приведенном вами псевдокоде auto receive_op = async_receive(queue);
она может не делать ничего, кроме возвращение авейтора
и некий мифический if(random) return никак не повлияет на очередь
потому что все состоятся только в use(co_await receive_op)
или реализовать в функции и забор сообщения, а потом уже возвращение авейтора
но тогда нужно делать RAII на receive_op что бы при мифическом if(random) return
сообщение закинуть обратно в очередь (т.е. в деструкторе receive_op)
а иначе да, оно будет утеряно
но возвращать авейтор в переменной рассчитывая на то что пользователь сам далее сделает co_await на переменной по моему мнения очень НЕ приятно в использовании