6

Görev iptal edilen bir görev çalıştırmak için Görev Paralel Kitaplığı'nı kullanıyorum - iptal edildiğinde - AggregateException kullanılarak yakalanan OperationCanceledException, aşağıdaki gibi. AggregateException, atılan istisnalara karşılık gelen bir TaskCanceledExceptions listesi içerir. Ne yazık ki, bu TaskCanceledExceptions özgün istisnalar tarafından atılan yığın izlerini kaybetmek gibi görünüyor. Bu tasarımla mı?AggregateException içinde TaskCanceledException yığın izini içermiyor

try 
{ 
    task1.Wait(); 
} 
catch (AggregateException aggEx) 
{ 
    var tcex = ex as TaskCanceledException; 
    if (tcex != null) 
    { 
     Debug.WriteLine("InnerException:{0}, Message:{1}, Source:{2}, StackTrace: {3}", 
      tcex.InnerException, tcex.Message, tcex.Source, tcex.StackTrace); 

     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

Sonuç:

InnerException:, Message:A task was canceled., Source:, StackTrace: 
+2

Lütfen gönderdiğiniz mesajları yansıtacak şekilde kodunuzu güncelleyin! :) –

+0

"if (tcex! = Null)" satırı doğru mu? "if (tcex == null)" –

+0

@MatthewWatson - olması gerektiği gibi görünüyor, bu "if" diğer istisnaları da filtreler. –

cevap

1

Ben tasarımdan olduğunu düşünürdüm, görev bir görev görev çıkmak için yardımcı anlamına olarak iptal edildiğinde istisnalar normalde sadece atılır iptal etti. Bu durumda yığın izinin amacı nedir? Devrimlerin istisnalarını tasarlayan devlerin düşünce sürecine dair bir anlayışa sahip olmadığım söyleniyor, sadece benim fikrim.

Özgün istisna tarafından atılan yığın izini kaybederek ne demek istediğinden emin değilim? Normalde iç/orijinal bir istisna olmaz. Belki başka bir istisna nedeniyle bir görevi iptal ediyorsun? Bu durumda, "orjinal" istisnayı akış yönünde yakalayıp, oraya giriş yapıp sonra iptal etmelisiniz.

+3

'a ulaştığında yığın izinin kaybolmasıdır. Yığın izinin gerekmesinin nedeni günlüğe kaydetme nedenidir; Kodumdaki çeşitli noktalarda ThrowIfCancellationRequested() çağırıyorum. Yığın izinin günlüğe kaydedilmesi, iptal isteğinin hangi noktada onaylandığını belirlememe izin verir. – sfarrugia

İlgili konular