कुछ डिस्पोजेबल ऑब्जेक्ट्स के रचनाकारों के लिए कार्रवाई का उचित तरीका माइक्रोसॉफ्ट के "नियम" के खिलाफ थोड़ा सा होगा जो एक डिस्पोजेड ऑब्जेक्ट पर किसी भी क्रिया को निष्पादित करने के लिए अपवाद फेंकना चाहिए, और इसके बजाय अधिक सामान्य नियम का पालन करना चाहिए कि अपवाद किसी भी समय किसी विधि की पोस्ट-शर्तों को पूरा नहीं किया जा सकता है। यदि रद्द करने का तरीका यह सुनिश्चित करना है कि कोई भी नौकरी को जीवित रहने के रूप में नहीं मानता है, और रद्द करने की विधि से पहले भी हर किसी को नौकरी के रूप में माना जाता है, तो विधि के लिए पोस्ट-हालत संतुष्ट है क्या वस्तु का निपटारा किया गया है।
आम तौर पर, एक अच्छी तरह से डिज़ाइन किए गए ऑब्जेक्ट के बाहर कोड को यह पूछने की आवश्यकता नहीं है कि इसे डिस्पोजेड किया गया है, सिवाय इसके कि यह संभवतः यह कहने के लिए कि यह किया गया है। इसके बजाए, ऑब्जेक्ट को स्वयं विधियों को प्रदान करना चाहिए जिनके अर्थ एक डिस्पोजेड ऑब्जेक्ट पर स्पष्ट और स्पष्ट होगा। वे विधियां आंतरिक रूप से एक IsDisposed ध्वज का उपयोग कर सकती हैं, लेकिन दौड़ की स्थिति को रोकने के लिए जो कुछ भी लॉकिंग आवश्यक था उसका उपयोग करना होगा। सामान्य तौर पर, पैटर्न
if (!myThing.isDisposed)
myThing.DoSomething();
एक संकेत है कि myThing वास्तव में एक DoSomethingIfNotDisposed विधि (संभवतः TryDoSomething कहा जाता है) का समर्थन करना चाहिए है। यदि आप ऐसा नहीं कर सकते हैं, तो मेरा झुकाव आपके स्वयं के DoSomethingIfNotDisposed एक्सटेंशन विधि को लिखना और ऑब्जेक्टडिस्प्लेक्स अपवाद (या वस्तु जो भी विशेष अपवाद फेंक देगा) को दबाने के लिए प्रयास/कैच का उपयोग करना हो सकता है।
क्यों एक थ्रेड उपयोग में संसाधनों की सफाई कर रहा है अभी भी?यह मेरे लिए एक बड़ी डिजाइन दोष की तरह लगता है। –
'रद्दीकरण टोकन' सिंक्रनाइज़ेशन के लिए उपयोग किया जाता है। ऐसा होता है कि दो धागे एक ही समय में नौकरी रद्द करने का प्रयास करते हैं। शायद इससे अधिक ताला मदद करता है? – Xaqron
कृपया अपने प्रश्न बीटीडब्ल्यू को ठीक करें, आप 'रद्दीकरण टोकन' का निपटारा नहीं कर रहे हैं, जो नहीं किया जा सकता है। आप 'रद्दीकरण टोकन स्रोत' का डुबकी कर रहे हैं। –