run
работает до тех пор, пока есть какие-либо ожидающие обработки задачи / обработчики.
В вашем случае вы запустили run
, затем был вызван первый метод async_
. Таким образом, run
немедленно завершается из-за отсутствия вызываемых обработчиков.
Вы должны инициировать некоторую асинхронную задачу, затем вызвать run
или использовать объект с именем work guard . Вы не указали, какую версию Boost вы используете, но есть два варианта:
- в старых
io_service
/ io_context::work
( ref ) - current,
executor_work_guard
( ref )
В своем классе вы можете добавить executor_work_guard
в качестве дополнительной переменной-члена:
class Server {
boost::asio::io_context _io_service;
boost::asio::executor_work_guard<boost::asio::io_context::executor_type> guard;
Server() : ...., guard(boost::asio::make_work_guard(_io_service)) {
}
};
при таком подходе , run
не возвращается, даже если нет обработчиков для обработки.