据我所知,就我检查了 boost::asio 文档和源代码而言,除了销毁上下文本身之外,没有办法明确销毁给定 io_context 上的所有挂起处理程序吗?
如果可能的话,我需要能够停止 io_context,销毁 io_context 上的挂起处理程序,然后做一些其他的事情,最后销毁与给定 io_context 和 io_context 本身关联的所有 io 对象(计时器、管道等)。
我知道我可以使用 work_guard::reset 并让所有挂起的处理程序运行,然后 io_context 将自行停止,但问题是许多处理程序可能会产生(post/defer/etc)新的挂起处理程序等,即每个这样的处理程序都需要用“如果停止”之类的东西来保护。
我认为 io_context::shutdown 正是这样做的,但是除了继承之外,没有办法显式调用关闭函数,因为它不是公开的。
谢谢。