आम तौर पर हाँ, अंत में चलेगा।
निम्नलिखित तीन परिदृश्यों के लिए, अंत में हमेशा चलेंगे:
- कोई अपवाद नहीं होता है
- तुल्यकालिक अपवाद (सामान्य प्रोग्राम प्रवाह में होने वाले अपवाद)।
इसमें सीएलएस अपवाद अपवाद शामिल हैं जो सिस्टम से प्राप्त होते हैं। अपवाद और गैर-सीएलएस अपवाद अपवाद हैं, जो सिस्टम से उत्पन्न नहीं होते हैं। अपवाद। गैर-सीएलएस अपवाद अपवाद स्वचालित रूप से RuntimeWrappedException द्वारा लपेटे जाते हैं। C # गैर-CLS शिकायत अपवादों को नहीं फेंक सकता है, लेकिन C ++ जैसी भाषाएं कर सकता है। C # को ऐसी भाषा में लिखे गए कोड में कॉल किया जा सकता है जो गैर-सीएलएस अनुपालन अपवादों को फेंक सकता है।
- अतुल्यकालिक ThreadAbortException
.NET 2.0 के रूप में, एक ThreadAbortException अब अंत में चलने से नहीं रोकेगा। अब पहले या बाद में ThreadAbortException को फहराया जाता है। अंत में हमेशा चलेगा और एक थ्रेड एबॉर्ट द्वारा बाधित नहीं होगा, इसलिए जब तक थ्रेड एबॉर्ट होने से पहले वास्तव में कोशिश की गई थी।
निम्नलिखित परिदृश्य, अंत में नहीं चलेगा:
अतुल्यकालिक StackOverflowException।
.NET 2.0 के रूप में एक स्टैक ओवरफ्लो प्रक्रिया को समाप्त करने का कारण होगा। अंत में नहीं चलाया जाएगा, जब तक कि अंत में एक सीईआर (विवश निष्पादन क्षेत्र) बनाने के लिए एक और बाधा नहीं लागू होती है। CER का उपयोग सामान्य उपयोगकर्ता कोड में नहीं किया जाना चाहिए। उन्हें केवल उसी स्थान पर उपयोग किया जाना चाहिए जहां यह महत्वपूर्ण है कि क्लीन-अप कोड हमेशा चलता है - सभी प्रक्रिया वैसे भी स्टैक ओवरफ्लो पर बंद हो रही है और इसलिए सभी प्रबंधित ऑब्जेक्ट डिफ़ॉल्ट रूप से साफ हो जाएंगे। इस प्रकार, केवल एक सीईआर प्रासंगिक होना चाहिए जो संसाधनों के लिए है जो प्रक्रिया से बाहर आवंटित किए गए हैं, जैसे, अप्रबंधित हैंडल।
आमतौर पर, अप्रबंधित कोड को उपयोगकर्ता कोड द्वारा उपभोग किए जाने से पहले कुछ प्रबंधित वर्ग द्वारा लपेटा जाता है। प्रबंधित आवरण वर्ग आम तौर पर अप्रबंधित हैंडल को लपेटने के लिए एक SafeHandle का उपयोग करेगा। सेफहैंडल एक महत्वपूर्ण अंतिम उपकरण और एक रिलीज विधि को लागू करता है जो सफाई कोड के निष्पादन की गारंटी देने के लिए एक सीईआर में चलाया जाता है। इस कारण से, आपको CERs को आउट-आउट उपयोगकर्ता कोड के साथ नहीं देखना चाहिए।
इसलिए तथ्य यह है कि अंत में StackOverflowException पर नहीं चलता है उपयोगकर्ता कोड पर कोई प्रभाव नहीं होना चाहिए, क्योंकि प्रक्रिया वैसे भी समाप्त हो जाएगी। यदि आपके पास कुछ किनारे का मामला है, जहां आपको कुछ अप्रबंधित संसाधन को साफ करने की आवश्यकता है, तो सुरक्षित हैण्डल या क्रिटिकलफाइनलऑब्जेक्ट के बाहर, तो निम्नानुसार एक सीईआर का उपयोग करें; लेकिन कृपया ध्यान दें, यह बुरा अभ्यास है - अप्रबंधित अवधारणा को एक प्रबंधित वर्ग (तों) और डिजाइन द्वारा उपयुक्त सेफहैंडल (ओं) में सारगर्भित किया जाना चाहिए।
जैसे,
// No code can appear after this line, before the try
RuntimeHelpers.PrepareConstrainedRegions();
try
{
// This is *NOT* a CER
}
finally
{
// This is a CER; guaranteed to run, if the try was entered,
// even if a StackOverflowException occurs.
}