Запустите асинхронную операцию для считывания определенного количества данных из потока.
template<
typename AsyncReadStream,
typename Allocator,
typename ReadHandler>
void-or-deduced async_read(
AsyncReadStream & s,
basic_streambuf< Allocator > & b,
ReadHandler handler);
Эта функция используется для асинхронного чтения определенного количества байтов данных из потока. Звонок функции всегда возвращается немедленно. Асинхронная операция будет продолжаться до тех пор, пока не будет выполнено одно из следующих условий:
- Поставляемый буфер полон (то есть достиг максимального размера).
- Произошла ошибка.
Эта операция реализована в терминах нуля или более вызовов функции async_read_some потока и известна как.. Программа должна гарантировать, что поток не выполняет никаких других операций чтения (таких как async_read, функция async_read_some потока или любые другие составные операции, которые выполняют чтения) до завершения этой операции.
- s
Поток, из которого следует читать данные. Этот тип должен поддерживать концепцию AsyncReadStream.
- b
<basic_streambuf
>объект, в который будут считаны данные. Владение Streambuf сохраняется за абонентом, который должен гарантировать, что он остается действительным до тех пор, пока не будет вызван обработчик.
- handler
-
Обработчик должен быть вызван, когда операция чтения завершится. Копии будут сделаны из обработчика по мере необходимости. Функциональная подпись обработчика должна быть:
void handler(
const boost::system::error_code& error,
std::size_t bytes_transferred
);
Независимо от того, выполняется ли асинхронная операция немедленно или нет, обработчик не будет вызываться из этой функции. Привлечение обработчика будет выполнено способом, эквивалентным использованию<boost::asio::io_service::post()
>.
Эта перегрузка эквивалентна вызову:
boost::asio::async_read(
s, b,
boost::asio::transfer_all(),
handler);