Boost.Asio文档
suggests the following exception handling pattern:
boost::asio::io_service io_service; ... for (;;) { try { io_service.run(); break; // run() exited normally } catch (my_exception& e) { // Deal with exception as appropriate. } }
它的问题是异常的上下文在处理时丢失.例如,如果在给定的io_service中有多个套接字会话,我不知道导致了异常的哪一个.
处理来自异步处理程序的异常而不将它们包装在try / catch块中的更好的方法是什么?
解决方法
Boost.Asio推荐的模式没有任何错误.你应该做的是打包任何必要的信息来处理异常以及异常对象.如果您使用
boost::exception(或其派生类型)进行异常处理,则可以通过创建
boost::error_info专业化并使用运算符<<<<<你的catch块可以用
get_error_info提取这个信息.