According to the documentation of async_read(...)
This operation is implemented in terms of zero or more calls to the stream's async_read_some
function, and is known as a composed operation. The program must ensure that the stream performs no other read operations (such as async_read
, the stream's async_read_some
function, or any other composed operations that perform reads) until this operation completes.
That would imply that you can't start any further async_read
operations on the same stream until the completion handler (the callback) is called -- this should be only once, when the provided buffer is filled, completion condition is satisfied, or some error occurs.
You're not entirely clear on what you mean by "queueing" multiple async_read
operations. The way you would implement a sequence of async_read
operations would be by starting the next operation in the completion handler.