किसी भी अपवाद जो उपयोग कथन की प्रारंभिक अभिव्यक्ति में फेंक दिया गया है, विधि स्कोप का प्रचार करेगा और उम्मीद के अनुसार ढेर कॉल करेगा।
हालांकि, यह देखने के लिए एक बात यह है कि अगर एक अपवाद प्रारंभिक अभिव्यक्ति में होता है, तो अभिव्यक्ति चर() विधि को अभिव्यक्ति चर पर नहीं कहा जाएगा। यह लगभग हमेशा वह व्यवहार होता है जिसे आप चाहते हैं, क्योंकि आप उस वस्तु को निपटाने से परेशान नहीं करना चाहते हैं जो वास्तव में नहीं बनाया गया था। हालांकि, जटिल परिस्थितियों में कोई समस्या हो सकती है। यही है, अगर कन्स्ट्रक्टर के अंदर कई प्रारंभिक दफन किए जाते हैं और कुछ अपवाद से पहले सफल होते हैं, तो उस बिंदु पर निपटान कॉल नहीं हो सकता है। यह आमतौर पर एक समस्या नहीं है, हालांकि, कन्स्ट्रक्टर आमतौर पर सरल रखा जाता है।
स्रोत
2008-09-29 17:05:25
मैं काफी हद तक निश्चित हूं कि आपका "गॉचा" सटीक नहीं है। चूंकि StreamReader क्लास IDISposable लागू करता है, इसलिए उपयोग कथन ऑब्जेक्ट के निपटारे का ख्याल रखेगा। चूंकि उपयोग कथन अंततः ब्लॉक की तरह कार्य करता है, इससे कोई फर्क नहीं पड़ता कि आपके पास अपवाद है या वापसी है। –
http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx के अनुसार, पकड़ें और आखिरकार कथन अभी भी निष्पादित किए गए हैं। अंततः ब्लॉक के रूप में "उपयोग" संकलन के बाद से, आपके उदाहरण में स्ट्रेड रीडर का निपटान किया जाएगा। – Uhall
मैं पिछले दो टिप्पणियों के साथ सहमत होगा। उपरोक्त @ उहल की टिप्पणी के अलावा, थ्रेडएबॉर्ट अपवाद थ्रेड को निरस्त नहीं करता है, यह परिणामस्वरूप उठाए गए अपवाद को पकड़ता है। –