C++ 在上一次调用完成之前再次调用boost ASIO async_receive()

C++ 在上一次调用完成之前再次调用boost ASIO async_receive(),c++,boost,boost-asio,asio,C++,Boost,Boost Asio,Asio,我知道对同一套接字对象的方法的并发调用会导致未定义的行为 但是,在调用第一个异步操作的完成处理程序之前,调用一个异步操作并再次调用它(非并发)怎么样 例如,以下情况(如有)的预期行为是什么: ? 这似乎是某些人不应该做的事情,但我在文档中找不到解决此类问题的具体位置。你说得对,这是异步I/o中的一个大禁忌。调用async_receive两次实际上没有什么意义,但是在发送时避免这种情况可能意味着使用某种队列、boost::circular_缓冲区等。这完全取决于您的应用程序 我认为这个问题没有得到

我知道对同一套接字对象的方法的并发调用会导致未定义的行为

但是,在调用第一个异步操作的完成处理程序之前,调用一个异步操作并再次调用它(非并发)怎么样

例如,以下情况(如有)的预期行为是什么:

?


这似乎是某些人不应该做的事情,但我在文档中找不到解决此类问题的具体位置。

你说得对,这是异步I/o中的一个大禁忌。调用async_receive两次实际上没有什么意义,但是在发送时避免这种情况可能意味着使用某种队列、boost::circular_缓冲区等。这完全取决于您的应用程序

我认为这个问题没有得到解决,因为boost文档假定读者已经熟悉使用异步套接字

boost::asio::ip::udp::socket socket;

// make socket join a multicast group, for instance

socket.async_receive( boost::asio::null_buffers( ) , & handler1 );

// assume handler1() is not called between this two lines

socket.async_receive( boost::asio::null_buffers( ) , & handler2 );