आपके कार्य को ICancelableTask लागू करने की आवश्यकता है। यह 4.0 में जोड़ा गया एक बहुत ही सरल इंटरफ़ेस है।
मूल रूप से आप केवल एक रद्द() विधि जोड़ते हैं। यह किसी भी समय, एक अलग धागे पर बुलाए जाने के लिए तैयार होना चाहिए, और तुरंत लौट जाना चाहिए। तब आपका कार्य तत्काल निष्पादन से वापस आना चाहिए। आमतौर पर आप रद्द() के अंदर एक बुलियन ध्वज सेट करेंगे। फिर आपके कार्य के अंदर आप आमतौर पर प्रत्येक इनपुट को एक इनपुट में बदलते हैं - उदाहरण के लिए, एक फ़ाइल को दूसरे के बाद कॉपी करना - और प्रत्येक पुनरावृत्ति में, ध्वज की जांच करें; यदि यह सच है, तोड़ो। इससे कोई फर्क नहीं पड़ता कि आप इस संदर्भ में निष्पादन से सच या गलत लौटते हैं या नहीं।
यदि आप टूलटास्क से प्राप्त कर रहे हैं - यदि आपका कार्य किसी टूल को फैलाता है, तो यह बहुत दृढ़ता से अनुशंसा की जाती है कि आप ऐसा करते हैं, क्योंकि यह कोड का एक बड़ा सौदा बचाता है, एसिंक लॉगिंग को संभाला जाता है, और अन्य चीजें - तो यह पहले से ही है हैंडल स्वचालित रूप से रद्द करें। जब रद्द होता है, तो यह उस उपकरण को मार देता है जो उसके पैदा हुए और उसके सभी बच्चे होते हैं। कुछ मामलों में सी ++ टीम के कार्य इस डिफ़ॉल्ट व्यवहार को ओवरराइड करते हैं, ताकि उनके कंपाइलर/लिंकर के पास लौटने से पहले उनके अर्ध-लिखित आउटपुट को साफ करने के लिए कुछ सेकंड हों।
(ट्रिविया: जब मैंने इसे पहली बार एमएसबिल्ड में कार्यान्वित किया, तो मैंने गलती से कभी-कभी बॉक्स को वीएस ब्लूस्क्रीन बनाया। यह लगभग वीएस 10 बीटा में भेज दिया गया था, लेकिन समय पर ही खोजा गया था। ब्लूस्क्रीन इसलिए थी क्योंकि प्रक्रिया पेड़ को समझने के लिए तर्क था गलत, और कभी कभी एक प्रणाली प्रक्रिया को मार डालेंगे। उफ़।)
दान
स्रोत
2012-04-01 20:10:01
मैं अनुमान लगा रहा हूं कि मैंने ऐसा कभी नहीं देखा क्योंकि यह 4.0 के लिए नया है, और मेरे कार्य अभी भी 2.0 को लक्षित कर रहे हैं। जानना अच्छा है, हालांकि, जब मैं 4.0 तक अपग्रेड करता हूं तो मैं इसका उपयोग शुरू कर सकता हूं। धन्यवाद! –
"प्रक्रिया पेड़ को समझने के लिए तर्क गलत था, और कभी-कभी सिस्टम प्रक्रिया को मार डालेगा। ओह।" इसे समझने में सक्षम होने के लिए +1! हा हा हा हा! –