2012-11-26 23 views
17

मैं अपने अनुप्रयोगों में से एक है कि इस प्रकार दिखता में कुछ कोड को देखकर किया गया है:कुल निष्कर्ष - समेकित अपवाद क्या है। फ्लैटन()। इनरएक्सप्शन का प्रतिनिधित्व करता है?

catch (AggregateException ae) 
{ 
    this._logger.Log(ae.Flatten().InnerException.ToString(), Category.Exception, Priority.High); 
} 

मेरा प्रश्न यह है। मुझे पता है कि AggregateException.Flatten() क्या करता है, और मुझे पता है कि AggregateException.Flatten().InnerExceptions क्या दर्शाता है। हालांकि, AggregateException.Flatten().InnerException (एकल) क्या प्रतिनिधित्व करता है?

उत्तर

35

यह मूल अपवाद के भीतर गैर-समेकित अपवादों के एक होगा। उदाहरण के लिए, अगर आपके पास की एक प्रारंभिक AggregateException:

AggregateException 
    AggregateException 
     IOException("x") 
     IOException("y") 
    IOException("z") 

फिर चपटा परिणाम की InnerException बाहर या तो IOException("x"), IOException("y") या IOException("z") के रूप में आ जाएगा। मुझे विश्वास नहीं है कि के बारे में कोई गारंटी है जो होगा। (मेरा मानना ​​है कि वर्तमान व्यवहार इस समय "z" संस्करण देगा ...) यह फ़्लैटेड संस्करण पर InnerExceptions का पहला होगा, लेकिन इसे सभी मूल गैर-समेकित अपवादों के यूनियन के रूप में देखा जाना चाहिए , कोई गारंटीकृत आदेश के साथ।

मूल रूप से InnerExceptionAggregateException के लिए बहुत उपयोगी नहीं है। यह InnerExceptions लॉग इन करने के लिए और अधिक उपयोगी होगा ... या शीर्ष स्तर के अपवाद पर ToString() पर कॉल करें, जो सभी संरचना को बनाए रखेगा ...