如果我一个接一个地调用 boost::asio::async_write/async_read,数据会被排序吗?或者在我再次调用写/读之前我需要等待回调吗?
提前致谢!
如果我一个接一个地调用 boost::asio::async_write/async_read,数据会被排序吗?或者在我再次调用写/读之前我需要等待回调吗?
提前致谢!
不能保证数据是有序的,如果您正在使用这些函数,您应该在再次写入之前等待回调。
(关于async_write的讨论,也适用于async_read)
因为async_write是根据对底层流的async_write_some函数的多次调用来实现的,所以这些调用不是原子的。每个调用都会尝试将数据写入流,并有一个内部回调来处理部分操作,实际上是在等待完成,就像您自己编写代码一样。因此,如果您不等待完成,您很容易得到混合数据。
您还需要考虑线程。如果您在流上多次调用async_x ,您最终可能会在不同线程中对同一底层流进行并发操作,从而导致未定义的行为。