Pengecualian pada utas terkelola

Runtime bahasa umum memungkinkan sebagian besar pengecualian yang tidak tertangani dalam utas agar dapat dilanjutkan secara alami. Dalam banyak kasus, hal ini berarti bahwa pengecualian yang tidak tertangani menyebabkan aplikasi dihentikan. Namun, runtime bahasa umum menyediakan backstop untuk pengecualian tertentu yang tidak tertangani yang digunakan untuk mengontrol alur program:

  • ThreadAbortException dilemparkan dalam utas kumpulan utas karena Abort dipanggil. Ini berlaku untuk aplikasi .NET Framework.

  • AppDomainUnloadedException dilemparkan dalam utas karena domain aplikasi tempat utas dijalankan sedang dibongkar.

  • Runtime bahasa umum atau proses host mengakhiri utas dengan memunculkan pengecualian internal.

Jika salah satu pengecualian ini tidak ditangani dalam utas yang dibuat oleh runtime bahasa umum, pengecualian akan menghentikan utas, tetapi runtime bahasa umum tidak memungkinkan pengecualian untuk melanjutkan lebih jauh.

Jika pengecualian ini tidak tertangani di utas utama, atau dalam utas yang memasuki runtime dari kode yang tidak dikelola, mereka akan melanjutkan secara normal dan mengakibatkan penghentian aplikasi.

Catatan

Runtime bahasa umum dapat melemparkan pengecualian yang tidak tertangani sebelum kode terkelola memiliki kesempatan untuk menginstal penanganan pengecualian. Meskipun kode terkelola tidak memiliki kesempatan untuk menangani pengecualian seperti itu, pengecualian diizinkan untuk melanjutkan secara alami.

Mengekspos masalah alur selama pengembangan

Ketika utas diizinkan untuk gagal secara diam-diam, tanpa mengakhiri aplikasi, masalah pemrograman serius dapat menjadi tidak terdeteksi. Ini adalah masalah khusus untuk layanan dan aplikasi lain yang berjalan untuk jangka waktu yang lama. Saat utas gagal, status program secara bertahap menjadi rusak. Performa aplikasi mungkin menurun, atau aplikasi mungkin menjadi tidak responsif.

Mengizinkan pengecualian yang tidak tertangani dalam utas untuk dilanjutkan secara alami, sampai sistem operasi menghentikan program, mengekspos masalah tersebut selama pengembangan dan pengujian. Laporan kesalahan tentang penghentian program mendukung penelusuran kesalahan.

Pengambilalihan host

Host yang tidak dikelola dapat menggunakan antarmuka ICLRPolicyManager pada API Hosting untuk mengambil alih kebijakan pengecualian default yang tidak tertangani dari runtime bahasa umum. Fungsi ICLRPolicyManager::SetUnhandledExceptionPolicy digunakan untuk mengatur kebijakan untuk pengecualian yang tidak tertangani.

Lihat juga