सबसे पहले नहीं किया है,, के MSDN में के बारे में CriticalFinalizerObject पढ़ने देती हैं, हम पढ़ सकते हैं कि:
में आलोचना से व्युत्पन्न कक्षाएं alFinalizerObject क्लास, सामान्य भाषा रनटाइम (सीएलआर) गारंटी देता है कि सभी महत्वपूर्ण अंतिमकरण कोड को निष्पादित करने का अवसर दिया जाएगा, बशर्ते अंतिमकर्ता सीईआर के नियमों का पालन करे, यहां तक कि उन स्थितियों में जहां सीएलआर जबरन एक एप्लिकेशन डोमेन या अबाउट्स को अनलोड करता है धागा।
यहां मुख्य शब्द संयुक्त है।
दूसरे, के MSDN फिर से पढ़ने देती हैं, प्रबंधित धागे में अपवाद के बारे में इस समय:
इन अपवादों या धागे कि अप्रबंधित कोड से क्रम में प्रवेश में मुख्य थ्रेड में बिना क्रिया कर रहे हैं, वे आम तौर पर आगे बढ़ना, जिसके परिणामस्वरूप आवेदन के समाप्त हो गया।
मुख्य शब्द टर्मिनल है।
तो, जब मुख्य थ्रेड में एक अनचाहे अपवाद होता है - ऐप समाप्त हो जाता है, लेकिन CriticalFinalizerObject केवल डोमेन को उतारने में मदद करता है।
उदाहरण के लिए, CriticalFinalizerObject कर सकते हैं ऐसी स्थिति में मदद करता है:
// Create an Application Domain:
AppDomain newDomain = AppDomain.CreateDomain("NewApplicationDomain");
// Load and execute an assembly:
newDomain.ExecuteAssembly(@"YouNetApp.exe");
//Unload of loaded domain
AppDomain.Unload(newDomain);
यह एक ऐसी स्थिति है, जहां डोमेन उतारा गया है, और आप की गारंटी CriticalFinalizerObject, जो आपके finalizer बुलाया जाएगा।
अनुप्रयोग के समाप्त साथ अपनी स्थिति में आप
AppDomain.CurrentDomain.UnhandledException
की सदस्यता के लिए कोशिश कर सकते हैं और मैन्युअल रूप से अपनी वस्तुओं को अंतिम रूप देने।
युपीडी: अपनी पुस्तक "CLR सी # के माध्यम से" में जेफरी रिक्टर CriticalFinalizerObject बारे में लिखा था, कि यह स्थितियों में, जहां आप SQLServer को उदाहरण के लिए अपने कोड भेज है, जो एक प्रक्रियाओं के रूप में सी # चला सकते हैं के लिए है। ऐसे मामले में CriticalFinalizerObject आपको अपनी ऑब्जेक्ट को साफ़ करने में मदद करता है, यदि SQLServer आपके लाइब्रेरी के डोमेन को अनलोड करेगा। इसके अलावा CriticalFinalizerObject उन परिस्थितियों के लिए है जहां आपको किसी अन्य ऑब्जेक्ट की कॉल विधि को ऑब्जेक्ट के अंतिम रूप में करने की आवश्यकता होती है, क्योंकि क्रिटिकलफिनलाइज़र ऑब्जेक्ट आपको गारंटी देता है कि यह सभी गैर-क्रिटिकल फाइनाइज़र ऑब्जेक्ट ऑब्जेक्ट्स के अंतिमकरण के बाद अंतिम रूप दिया जाएगा।
विस्तृत उत्तर के लिए धन्यवाद! मैं कहूंगा कि "समाप्त" बनाम "अनलोडेड" जैसे शब्द इन एमएस दस्तावेज़ों में बहुत अच्छी तरह से परिभाषित नहीं हैं। सामान्य रूप से, कुछ "समाप्त" होने का मतलब यह नहीं है कि यह "अनलोड नहीं किया जाएगा", हालांकि हम देखते हैं कि यह ऐसा नहीं है ... – IlyaP
मैंने "सीएलआर के माध्यम से सी # के जवाब में कुछ अपडेट जोड़े" – igofed