はい:
私のmain.cppをコードは次のようなものです。
完了ハンドラからスローされた例外が伝播されることが記載されています。したがって、アプリケーションに応じて適切に処理する必要があります。
多くの場合、これはエラーなしで終了するまでループして、run()
を繰り返すことになります。私は
static void m_asio_event_loop(boost::asio::io_service& svc, std::string name) {
// http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/reference/io_service.html#boost_asio.reference.io_service.effect_of_exceptions_thrown_from_handlers
for (;;) {
try {
svc.run();
break; // exited normally
} catch (std::exception const &e) {
logger.log(LOG_ERR) << "[eventloop] An unexpected error occurred running " << name << " task: " << e.what();
} catch (...) {
logger.log(LOG_ERR) << "[eventloop] An unexpected error occurred running " << name << " task";
}
}
}
のようなものを持っている私たちのコードベースで
ここでドキュメントのリンクhttp://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/reference/io_service.html#boost_asio.reference.io_service.effect_of_exceptions_thrown_from_handlers
は、それはすべてが依存です。あなたがそれから回復できますか?例外をキャッチする方法も知っていますか? – NathanOliver
@ NathanOliver非同期設定では、特に、多くのフローの1つの例外が多重化サービス全体を停止するかどうかを知ることです。 90%の症例では、それは望ましくない。プロクターモデルでは通常の制御フローは適用されません – sehe