मैं ध्यान देता हूं कि इस पुराने प्रश्न के उत्तर में किसी ने भी उल्लेख नहीं किया है कि एक अपवाद पर ताला जारी करना एक अविश्वसनीय रूप से खतरनाक काम है। हां, C # में लॉक स्टेटमेंट "अंत में" शब्दार्थ है; जब नियंत्रण लॉक को सामान्य या असामान्य रूप से बाहर निकालता है, तो लॉक को छोड़ दिया जाता है। आप सभी इस बारे में बात कर रहे हैं जैसे यह एक अच्छी बात है, लेकिन यह एक बुरी बात है! सही बात यह है कि यदि आपके पास एक बंद क्षेत्र है जो एक अखंड अपवाद फेंकता है तो रोगग्रस्त प्रक्रिया को तुरंत समाप्त करना है इससे पहले कि यह अधिक उपयोगकर्ता डेटा को नष्ट कर दे , न कि लॉक को मुक्त करें और चलते रहें ।
इसे इस तरह से देखें: मान लें कि आपके पास दरवाजे पर ताला लगा हुआ एक बाथरूम है और बाहर इंतजार कर रहे लोगों की कतार है। बाथरूम में एक बम गिरा, जिससे उस व्यक्ति की मौत हो गई। आपका सवाल है "उस स्थिति में ताला स्वतः ही अनलॉक हो जाएगा ताकि अगला व्यक्ति बाथरूम में जा सके?" हाँ यह होगा। ये अच्छी बात नहीं है। एक बम बस वहाँ से चला गया और किसी को मार डाला! नलसाजी शायद नष्ट हो गया है, घर अब संरचनात्मक रूप से ध्वनि नहीं है, और वहां एक और बम हो सकता है । सही बात यह है कि हर किसी को जल्दी से जल्दी बाहर निकालो और पूरे घर को ध्वस्त कर दो।
मेरा मतलब है, इसके माध्यम से सोचें: यदि आपने डेटा संरचना से पढ़ने के लिए कोड के एक क्षेत्र को बंद कर दिया है, तो यह किसी अन्य थ्रेड पर म्यूट किए बिना है, और उस डेटा संरचना में किसी चीज ने एक अपवाद फेंक दिया है, तो यह अच्छा है कि यह है क्योंकि डेटा संरचना भ्रष्ट है । उपयोगकर्ता डेटा अब गड़बड़ है; आप इस बिंदु पर उपयोगकर्ता डेटा को सहेजने का प्रयास नहीं करना चाहते हैं क्योंकि आप तब दूषित डेटा सहेज रहे हैं । बस प्रक्रिया को समाप्त करें।
यदि आप एक ही समय में राज्य को पढ़ने वाले किसी अन्य थ्रेड के बिना म्यूटेशन करने के लिए कोड का एक क्षेत्र लॉक करते हैं, और म्यूटेशन फेंकता है, तो यदि डेटा पहले भ्रष्ट नहीं था , तो यह अब सुनिश्चित है । यह वास्तव में परिदृश्य है कि ताला के खिलाफ की रक्षा के लिए माना जाता है । अब उस कोड को पढ़ने के लिए इंतजार कर रहा है जो राज्य को तुरंत भ्रष्ट राज्य तक पहुंच देगा , और शायद खुद दुर्घटनाग्रस्त हो जाएगा। फिर, सही बात यह है कि प्रक्रिया को समाप्त करना है।
कोई फर्क नहीं पड़ता कि आप इसे कैसे काटते हैं, ताला के अंदर एक अपवाद बुरी खबर है । पूछने के लिए सही सवाल यह नहीं है "क्या अपवाद की स्थिति में मेरा ताला साफ हो जाएगा?" पूछने के लिए सही सवाल यह है कि "मैं यह कैसे सुनिश्चित करूं कि एक ताला के अंदर कोई अपवाद नहीं है? और अगर वहाँ है, तो मैं अपना कार्यक्रम कैसे बनाऊं ताकि उत्परिवर्तन पिछले अच्छे राज्यों में वापस आ जाए?"