6

शामिल नहीं है, मैं कार्य को चलाने के लिए कार्य समांतर लाइब्रेरी का उपयोग कर रहा हूं - जब रद्द किया गया - ऑपरेशन कैंक्लेड एक्सेप्शन फेंकता है, जिसे तब समेकित अपवाद का उपयोग करके पकड़ा जाता है। एग्रीगेट एक्सेप्शन में टास्ककैंक्लेड एक्सेप्शन की एक सूची है, जो फेंकने वाले अपवादों से मेल खाती है। दुर्भाग्यवश, ये कार्यकुशल अपवाद मूल अपवादों द्वारा फेंकने वाले स्टैक निशान खोने लगते हैं। क्या यह डिजाइन द्वारा है?AggregateException में TaskCanceledException में स्टैक ट्रेस

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; 
    } 
} 

परिणाम:

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

कृपया आपके द्वारा पोस्ट किए गए परिणामों को दर्शाने के लिए अपना कोड अपडेट करें! :) –

+0

लाइन "अगर (tcex! = Null)" सही है? ऐसा लगता है कि यह होना चाहिए "अगर (tcex == null)" –

+0

@MatthewWatson - यह 'if' अन्य अपवादों को फ़िल्टर करता है। –

उत्तर

1

मैं इसे डिजाइन द्वारा है लगता होगा, कार्य को रद्द कर दिया अपवाद सामान्य रूप से केवल जब किसी कार्य को रद्द कर दिया गया है के रूप में बाहर निकलने के लिए काम में मदद करने के मतलब फेंक दिया जाता है। इस स्थिति में एक स्टैक ट्रेस का क्या उद्देश्य है? ऐसा कहा जा रहा है कि मुझे देव की विचार प्रक्रिया में अंतर्दृष्टि नहीं है जिसने रद्दीकरण अपवादों को डिजाइन किया है, सिर्फ मेरी राय।

मुझे यकीन नहीं है कि मूल अपवाद द्वारा फेंक दिया गया स्टैक ट्रेस खोने से आपका क्या मतलब है? आम तौर पर उनके पास आंतरिक/मूल अपवाद नहीं होता। शायद आप किसी अन्य अपवाद के कारण एक कार्य रद्द कर रहे हैं? उस स्थिति में आपको "मूल" अपवाद को अपस्ट्रीम पकड़ना चाहिए, इसे वहां लॉग ऑन करना होगा, फिर बाद में रद्द करना होगा।

+3

तक पहुंच जाता है तो स्टैक ट्रेस खो जाता है कारण लॉगिंग उद्देश्यों के लिए एक स्टैक ट्रेस की आवश्यकता होती है; मैं अपने कोड में विभिन्न बिंदुओं पर ThrowIfCancellationRequested() को कॉल कर रहा हूं। स्टैक ट्रेस लॉगिंग करने से मुझे पहचानने की अनुमति मिल जाएगी कि रद्दीकरण अनुरोध किस बिंदु पर स्वीकार किया जाता है। – sfarrugia

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