5

Aşağıdaki kodda "Inside catch block" yazdırılmaz. Yine de "final çizgisi" yazdırılır. Neden öyle? Lütfen yardım et.Neden Task.WaitAny istisnayı atmıyor?

Task task1 = Task.Factory.StartNew(() => 
    {     
     throw new Exception("some exception");    
    }); 

    try 
    { 
     Task.WaitAny(new Task[] { task1 }); 
    } 
    catch(Exception e) 
    { 
     Console.WriteLine("Inside catch block."); 
    } 

    Console.WriteLine("Final line."); 
+1

@Servy kullanarak istisna farklı bir iş parçacığı meydana yakalayabilirsiniz mevcut olanı. –

+0

@Servy - diğer soru gerçekten farklıydı. Bu kopya işaretini kaldırabilir misiniz? Bu soruyu tekrar açmak için oy verdim. – KFL

cevap

-1
 Task task1 = Task.Factory.StartNew(() => 
     { 
      throw new Exception("some exception"); 
     }) 
     .ContinueWith(task => Console.WriteLine(task.Exception.InnerException.Message), TaskContinuationOptions.OnlyOnFaulted); 

Yani o sadece ana iş parçacığı aynı iş parçacığı üzerinde özel durum atma değil bir istisna atma olmadığını değil.

1

kodunuzu farklı bir iş parçacığı içinde yürütülmesi Bunun nedeni, ama ben soru gerçekten aynı değildir düşünüyorum aşağıdaki kodu

Task task1 = Task.Factory.StartNew(() => 
     { 
      throw new Exception("some exception"); 
     }); 

     try 
     { 
      task1.Wait(); 
     } 
     catch (AggregateException ex) 
     { 
      Console.WriteLine(ex); 
     } 
+4

Cevabınız için teşekkürler Joseph. Ancak MSDN, WaitAny() yönteminin bu özel davranışını belgelemiyor. Wait() veya WaitAll() yöntemini kullanırsak, catch bloğu yürütülür, ancak WaitAny() durumunda çalışmaz. Microsoft'un WaitAny() yönteminin bu şekilde olmasını mı yoksa bir hata mı olduğunu düşünmüyorum. –

İlgili konular