[英]Exception handling in 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.
}
}
它的問題是異常的上下文在處理時丟失了。 例如,如果我在給定的io_service中有多個套接字會話,我不知道哪個引發了異常。
如果沒有將它們包裝在try/catch
塊中,處理異步處理程序的異常會有什么更好的方法?
Boost.Asio推薦的模式沒有任何問題。 您應該做的是打包處理異常的任何必要信息以及異常對象。 如果你使用boost :: exception (或從它派生的類型)進行異常處理,你可以通過創建boost :: error_info的特化並使用operator <將它附加到異常對象,非常容易地附加元數據(包括會話信息)。 <。 然后,您的catch塊可以使用get_error_info提取此信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.