从executor_work_guard.hpp可知,executor_work_guard的构造和析构分别调用了 executor_.on_work_started(); 和 executor_.on_work_finished();
executor_是executor_work_guard绑定的io_context对象
而on_work_started 才是真正保证即使 io_context中没有任务的时候,run也不退出的关键
所以我们可以通过操控executor_work_guard生命周期的方法,来控制run什么时候退出
1 for (std::size_t i = 0; i < pool_size; ++i) 2{ 3 io_context_ptr io_context(new boost::asio::io_context); 4 io_contexts_.push_back(io_context); 5 work_.push_back(boost::asio::make_work_guard(*io_context)); 6}