Ale*_*x B 10 c++ boost boost-asio
Boost.Asio文档建议以下异常处理模式:
boost::asio::io_service io_service;
...
for (;;)
{
try
{
io_service.run();
break; // run() exited normally
}
catch (my_exception& e)
{
// Deal with exception as appropriate.
}
}
Run Code Online (Sandbox Code Playgroud)
它的问题在于异常的上下文在处理时丢失了.例如,如果我在给定的io_service中有多个套接字会话,我不知道哪个引发了异常.
什么是更好的方法来处理异步处理程序的异常而不将它们包装在try/catch块中?
Mic*_*yan 14
Boost.Asio推荐的模式没有任何问题.您应该做的是打包处理异常的任何必要信息以及异常对象.如果你使用boost :: exception(或从它派生的类型)进行异常处理,你可以通过创建boost :: error_info的特化并使用operator <将它附加到异常对象,非常容易地附加元数据(包括会话信息).<.然后,您的catch块可以使用get_error_info提取此信息.