7

Task s kullanıldığında ne kadar işlenmemiş özel durumların işlendiğinin farkındayım, yalnızca kullanıcı kodu henüz 'gözlemlemediyse sonlandırıcıya işlenmemiş bir öğe atıyor.Zamanlayıcı iş parçacığında işlenmeyen bir özel durum neden çakılmadı

Ayrıca bir eşzamansız iş parçacığında işlenmeyen bir özel durumun (ör. Action.BeginInvoke()) yakalama çağrısında nasıl yakalandığına ve yeniden fırlatıldığına (ör. Action.EndInvoke()) da dikkatimi çekiyorum.

Neyi anlamadığım, bunun nasıl engellenmeyeceğidir.

static void Main(string[] args) 
    { 
     var timer = new System.Timers.Timer() {Interval = 100}; 
     timer.Elapsed += (o, e) => { throw new Exception(); }; 
     timer.Start(); 

     Console.ReadKey(true); 
    } 
+0

Bu benim hayatımın 4-6 saatiydi, asla geri dönemeyeceğim. Microsoft'un bu konudaki çöküşüne dair korkunç bir karar. –

cevap

9
.NET 4.0 belgelerine

: .NET Framework sürüm 2.0

ve öncesinde Timer bileşeni yakalar ve Geçen olay için olay işleyicileri tarafından atılan tüm istisnalar bastırır. Bu davranış, .NET Framework'ün sonraki sürümlerinde değişikliklerine tabidir.

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

henüz bu davranış aslında değişmiş olduğunu iddia hiçbir açıklama yoktur.

+0

Ahh bu olurdu, Teşekkürler - Bu sayfayı gerçekten okudum, ama onu kaçırmış olmalı. Bence, işlenmemiş istisnaları bastırmamak için bütün standart uygulamalarına aykırı bir şeyin, bu güzel sarı kutulardan birinin içinde olacağını düşünmüştüm. – Tyson

+0

@Tyson, kabul etti. Diğer yerler ile çirkin bir tutarsızlık getirir. –

İlgili konular