Buradaki satırların arasını doğru bir şekilde okursam, sorun, varsayılan hata ayıklayıcı davranışının işlenmemiş istisnalarda bozulmasına rağmen istisnanızın etkin bir şekilde 'kaybolmasıdır'.
Zaman uyumsuz yöntemleriniz varsa, bu sorunla karşılaşıyor olabilirsiniz çünkü bir Görev devamının bir parçası olarak bir iş parçacığı havuzu iş parçacığında yakalanmayan istisnalar, işlenmemiş istisnalar olarak kabul edilmez. Bunun yerine yutulurlar ve Görev ile birlikte saklanırlar.
Örneğin, şu koda bir göz atın:
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
private async static Task Test()
{
await Task.Delay(100);
throw new Exception("Exception!");
}
}
Bu programı varsayılan hata ayıklayıcı ayarlarıyla çalıştırırsanız (yalnızca işlenmeyen istisnalarda durdurun), hata ayıklayıcı çalışmaz. Bunun nedeni, devam için ayrılan iş parçacığı havuzu iş parçacığının istisnayı yutması (Task örneğine geçirmesi) ve kendisini havuza geri bırakmasıdır.
Unutmayın, bu durumda, asıl sorun, Task
iade edilenin Test()
asla kontrol edilmemesidir. Kodunuzda benzer türde 'ateşle ve unut' mantığı varsa, istisnaları atıldıkları anda görmezsiniz (yöntemin içinde 'işlenmemiş' olsalar bile); istisna, yalnızca Görevi bekleyerek, Sonucunu kontrol ederek veya İstisnasına açıkça bakarak gözlemlediğinizde görünür.
Bu sadece bir tahmin, ama bence muhtemelen böyle bir şey gözlemliyorsunuz.
Tool
veyaWindow
sekmesi istenen tüm konumlara sahip değilse, önceki sürümünüzden geçerli düzeni koruyacaktır . Sizin durumunuzda, İstisna Ayarları'nı arıyorsunuz .