Pelaksanaan selamat kaedah tak segerak Kebakaran-dan-Lupakan dalam ASP.NET MVC: mengendalikan pengecualian yang tidak dikendalikan
Artikel ini meneroka kemungkinan risiko dan amalan terbaik apabila melaksanakan corak "api-dan-lupakan" kaedah tak segerak dalam ASP.NET MVC, memfokuskan pada cara mengendalikan pengecualian yang tidak diperhatikan. Ini soalan biasa.
Walaupun kaedah segerak boleh dibalut untuk pelaksanaan dalam urutan berasingan menggunakan Task.Run
atau TaskFactory.StartNew
, kaedah tak segerak memberikan cabaran yang unik. Memanggil kaedah tak segerak tanpa pengendalian ralat yang betul boleh membawa kepada pengecualian yang tidak diperhatikan, yang memerlukan pendekatan yang lebih komprehensif untuk menangani isu ini.
Satu penyelesaian ialah menggunakan kaedah pembalut tersuai seperti:
<code class="language-csharp">private async void DeleteFooWrapperAsync() { try { await DeleteFooAsync(); } catch(Exception exception) { m_log.Error("DeleteFooAsync failed: " + exception.ToString()); } }</code>
Kaedah ini boleh dipanggil dalam TaskFactory.StartNew
dan menyediakan cara yang lebih selamat untuk mengendalikan pengecualian. Walau bagaimanapun, ini memerlukan penulisan kod pembalut tersuai untuk setiap kaedah tak segerak untuk dilaksanakan.
Pilihan lain (dicadangkan oleh Stephen Cleary) ialah menggunakan komponen BackgroundTaskManager
. Pendekatan ini membenarkan pendaftaran kerja segerak dan tak segerak serta pengendalian pengecualian melalui TaskScheduler.UnobservedTaskException
:
<code class="language-csharp">BackgroundTaskManager.Run(() => DeleteFooAsync());</code>
Adalah penting untuk ambil perhatian bahawa "api-dan-lupa" harus digunakan dengan berhati-hati. Jika keputusan DeleteFooAsync
penting, disyorkan untuk menunggu tugasan selesai. Walau bagaimanapun, jika corak sedemikian sememangnya diperlukan, penyelesaian ini menyediakan cara yang cekap untuk mengendalikan pengecualian yang tidak diperhatikan dan mencegah kemungkinan kegagalan sistem.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kaedah Async Api-dan-Lupakan dengan Selamat dalam ASP.NET MVC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!