Perlukah Pengecualian Dilemparkan oleh rangsangan::asio::io_service::run() Ditangkap?
Masalah:
boost::asio::io_service::run() boleh membuang boost::system::system_error exception jika ralat berlaku semasa pelaksanaan. Adalah penting untuk mempertimbangkan sama ada pengecualian ini perlu dikendalikan.
Jawapan:
Ya, pengecualian harus dikendalikan.
Penjelasan:
Mengikut dokumentasi rangsangan, pengecualian yang dilemparkan daripada pengendali penyiapan ialah disebarkan. Oleh itu, pengecualian yang dilemparkan oleh run() harus dikendalikan dengan sewajarnya untuk aplikasi tertentu.
Dalam banyak kes, disyorkan untuk menggelung dan mengulang run() sehingga ia keluar tanpa ralat. Ini memastikan operasi berterusan melainkan ralat tidak boleh dipulihkan berlaku.
Contoh Kod Pengendalian:
Contoh pengendalian pengecualian yang dilemparkan oleh run() dalam gelung:
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; } } }
Pautan Dokumentasi:
Untuk lebih lanjut maklumat, rujuk dokumentasi Boost: 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
Atas ialah kandungan terperinci Sekiranya Anda Menangkap Pengecualian yang Dilemparkan oleh rangsangan::asio::io_service::run()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!