Menguruskan Operasi Asynchronous Fire-and-Forget dalam Pengawal ASP.NET MVC
Kaedah "api-dan-lupa" tak segerak, seperti DeleteFooAsync
, sering ditemui dalam pengaturcaraan tak segerak. Walaupun nasihat konvensional adalah untuk mengelakkan async
/await
dalam senario ini, ini boleh menjadi tidak praktikal apabila rakan sejawatan segerak tidak tersedia.
Hanya mengendalikan pengecualian yang tidak diperhatikan menggunakan TaskScheduler.UnobservedTaskException
tidak boleh dipercayai, kerana isu konteks penyegerakan boleh timbul.
Membungkus kaedah tak segerak dalam blok cuba-tangkap, seperti yang ditunjukkan di bawah, menangani pengecualian tetapi terbukti menyusahkan untuk pelbagai kaedah:
<code class="language-csharp">private async void DeleteFooWrapperAsync() { try { await DeleteFooAsync(); } catch (Exception exception) { m_log.Error("DeleteFooAsync failed: " + exception.ToString()); } }</code>
Penyelesaian paling teguh untuk panggilan kebakaran-dan-lupa dalam pengawal ASP.NET MVC menggunakan Task.Run
:
<code class="language-csharp">Task foo = Task.Run(() => DeleteFooAsync());</code>
Ini memunggah operasi tak segerak ke urutan berasingan, menghalangnya daripada menyekat respons dan memastikan pelaksanaan yang boleh dipercayai.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Kaedah Async Kebakaran-dan-Lupakan dengan Betul dalam ASP.NET MVC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!