5

निम्नलिखित कोड में "कैच ब्लॉक के अंदर" कभी मुद्रित नहीं होता है। हालांकि "अंतिम पंक्ति" मुद्रित है। ऐसा क्यों? कृपया मदद करे।कार्य क्यों नहीं करता है। WaitAny अपवाद फेंक देता है?

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 का उपयोग कर पकड़ कर सकते हैं एक अलग सूत्र में अपवाद घटित मौजूदा एक –

+0

@ सर्वी - दूसरा प्रश्न वास्तव में अलग था। क्या आप उस डुप्लिकेट चिह्न को हटा सकते हैं? मैंने इस सवाल को फिर से खोलने के लिए वोट दिया है। – KFL

उत्तर

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

तो यह है कि यह एक अपवाद यह सिर्फ अपने मुख्य थ्रेड के रूप में ही धागे पर अपवाद फेंक नहीं है फेंक नहीं है नहीं है।

1

इसका कारण यह है अपने कोड एक अलग धागे में क्रियान्वित है, लेकिन, मुझे लगता है कि सवाल वास्तव में वैसा नहीं है जैसा आप निम्नलिखित कोड

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

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

आपके उत्तर के लिए धन्यवाद यूसुफ। लेकिन एमएसडीएन WaitAny() विधि के इस विशेष व्यवहार को दस्तावेज नहीं करता है। अगर हम प्रतीक्षा() या WaitAll() का उपयोग करते हैं तो कैच ब्लॉक निष्पादित होता है, लेकिन यह WaitAny() के मामले में निष्पादित नहीं होता है। मुझे संदेह है कि क्या माइक्रोसॉफ्ट वास्तव में WaitAny() को इस तरह से होना चाहता है या यह एक बग है। –

संबंधित मुद्दे