Jika saya membaca dengan benar yang tersirat di sini, masalahnya adalah bahwa pengecualian Anda secara efektif 'menghilang' meskipun perilaku debugger default seharusnya rusak pada pengecualian yang tidak tertangani.
Jika Anda memiliki metode asynchronous, Anda mungkin mengalami masalah ini karena pengecualian tidak tertangkap di thread pool thread sebagai bagian dari kelanjutan tugas tidak dianggap pengecualian tidak tertangani. Sebaliknya, mereka ditelan dan disimpan dengan Tugas.
Misalnya, lihat kode ini:
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
private async static Task Test()
{
await Task.Delay(100);
throw new Exception("Exception!");
}
}
Jika Anda menjalankan program ini dengan setelan debugger default (berhenti hanya pada pengecualian yang tidak tertangani), debugger tidak akan rusak. Ini karena utas kumpulan utas yang dialokasikan untuk kelanjutan menelan pengecualian (meneruskannya ke contoh Tugas) dan melepaskan dirinya kembali ke kumpulan.
Perhatikan bahwa, dalam hal ini, masalah sebenarnya adalah bahwa Task
dikembalikan olehTest()
tidak pernah diperiksa. Jika Anda memiliki jenis logika 'api-dan-lupakan' yang serupa dalam kode Anda, maka Anda tidak akan melihat pengecualian pada saat pengecualian tersebut dilempar (bahkan jika 'tidak ditangani' di dalam metode); pengecualian hanya muncul saat Anda mengamati Tugas dengan menunggunya, memeriksa Hasil atau secara eksplisit melihat Pengecualiannya.
Ini hanya tebakan, tapi menurut saya kemungkinan besar Anda mengamati sesuatu seperti ini.
Tool
atauWindow
tidak memiliki semua lokasi yang diinginkan. Dalam kasus Anda, Anda mencari Pengaturan Pengecualian .