Heim >Backend-Entwicklung >C++ >Sollten Sie von boost::asio::io_service::run() ausgelöste Ausnahmen abfangen?
Sollten von boost::asio::io_service::run() ausgelöste Ausnahmen abgefangen werden?
Problem:
boost::asio::io_service::run() kann a werfen boost::system::system_error Ausnahme, wenn während der Ausführung ein Fehler auftritt. Es ist wichtig zu überlegen, ob diese Ausnahme behandelt werden soll.
Antwort:
Ja, die Ausnahme sollte behandelt werden.
Erklärung:
Gemäß der Boost-Dokumentation werden von Abschlusshandlern ausgelöste Ausnahmen weitergegeben. Daher sollten von run() ausgelöste Ausnahmen für die jeweilige Anwendung entsprechend behandelt werden.
In vielen Fällen wird empfohlen, run() in einer Schleife auszuführen und zu wiederholen, bis es ohne Fehler beendet wird. Dies gewährleistet einen kontinuierlichen Betrieb, sofern kein nicht behebbarer Fehler auftritt.
Beispiel für einen Behandlungscode:
Ein Beispiel für die Behandlung von Ausnahmen, die von run() in einer Schleife ausgelöst werden:
void asio_event_loop(boost::asio::io_service& svc, std::string name) { while (true) { try { svc.run(); break; } catch (std::exception const &e) { std::cout << "[eventloop] An unexpected error occurred running " << name << " task: " << e.what() << std::endl; } catch (...) { std::cout << "[eventloop] An unexpected error occurred running " << name << " task" << std::endl; } } }
Link zur Dokumentation:
Weitere Informationen finden Sie im Boost Dokumentation: 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
Das obige ist der detaillierte Inhalt vonSollten Sie von boost::asio::io_service::run() ausgelöste Ausnahmen abfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!