ASIO 中协程之间的通信

Communicating between coroutines in ASIO

我有一个异步侦听 asio UDP 套接字的协程。当它收到一条消息时,它 co_spawns 一个新的协程来处理消息,然后返回监听端口。这个新协程可能需要在同一个 UDP 套接字上进行额外的通信。确保对第二个协程发出的请求的回复返回给它的好方法是什么?

我正在考虑制作某种未来来存储新协程可以 co_await 的回复,但它在 asio 中似乎不可用,而且看起来也不容易制作.我可以存储一个函数对象,当收到回复时调用该函数对象,但是协程首先有什么意义呢?我可以让新协程监听同一个套接字,但哪个协程会收到回复?任何一个?两个?

总结一下:我希望能够暂停新的协程,直到我得到回复,当我在原始协程中得到回复时,我希望它恢复新的协程。基本上我想要 cppcoro::single_consumer_event

我找到了一个不错的解决方案,但我很想找到一个更好的解决方案。我可以创建一个包含 asio::steady_timer 的未来 class。然后我可以以一种简洁的方式处理超时,我可以在原始协程得到回复时调用取消计时器。似乎有点矫枉过正,而且 steady_timer 很大(112 字节?!)但如果它有效,那么它就有效...