從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}