Вероятно, вы захотите получить исполнителя, который может быть чем-то другим, кроме io_context.
Там есть вызов get_executor()
, чтобы сделать это напрямую:
boost::asio::io_context io;
boost::asio::ip::tcp::socket s(io);
auto ex = s.get_executor();
Исполнитель будет позволяют вам делать большинство вещей, которые вы, вероятно, использовали io_context
для.
UPDATE
К комментарию, я НЕ рекомендую полагаться на точную цель исполнителя, которого вы передали через любой сервисный объект, но вы можете заставить свою руку, если действительно не хотите обновлять свой дизайн прямо сейчас:
Live On Coliru
#include <boost/asio.hpp>
int main() {
boost::asio::io_context io;
boost::asio::ip::tcp::socket s(io);
auto ex = s.get_executor();
auto* c = ex.target<boost::asio::io_context>();
boost::asio::ip::tcp::socket more_sockets(*c);
assert(c == &io);
}
При составлении операций asyn c вы можете получить исполнитель из обработчика, используя boost::asio::get_associated_executor()