2011-07-15 12 views
5

मैं .NET 4.0 और उनके रद्दीकरण में कार्य का अध्ययन कर रहा हूं। मुझे यह तथ्य पसंद है कि टीपीएल सहकारी तरीके से रद्दीकरण से निपटने का प्रयास करता है।कार्यों का उपयोग करके लंबे समय तक चल रहे आईओ/नेटवर्क ऑपरेशन को रद्द करने का एक अच्छा तरीका क्या होगा?

हालांकि, किसी ऐसे स्थिति में क्या करना चाहिए जहां किसी कार्य के अंदर एक कॉल अवरुद्ध हो और लंबे समय तक लगे? परीक्षा आईओ/नेटवर्क के लिए।

स्पष्ट रूप से लिखना लिखना खतरनाक होगा। लेकिन वे उदाहरण हैं।

उदाहरण: मैं इसे कैसे रद्द करूं? DownloadFile एक लंबा समय ले सकता है।

Task.Factory.StartNew(() => 
    WebClient client = new WebClient(); 
    client.DownloadFile(url, localPath); 
); 
+0

आप अपनी स्थिति के बारे में एक कोड स्निपेट पोस्ट कर सकते हैं? –

उत्तर

1

कार्य रद्दीकरण टोकन का समर्थन करता है। आप रद्दीकरण टोकनसोर्स का एक उदाहरण बना सकते हैं और अपनी डाउनलोड फ़ाइल को अपनी टोकन प्रॉपर्टी पास कर सकते हैं। फिर अपने कोड में बिंदुओं पर जहां आप रुक सकते हैं, टोकन की जांच करें, IsCancellationRequested संपत्ति यह देखने के लिए कि रद्द करने का अनुरोध किया गया था या नहीं।

आपको स्टार्टन्यू (विधि के बाद) को टोकन भी पास करना चाहिए।

वास्तव में ऑपरेशन को रद्द करने के लिए आप रद्दीकरण टोकन पर रद्द विधि को कॉल कर सकते हैं।

चेक बाहर this MSDN article on cancellation

+1

मुझे खेद है लेकिन मेरे प्रश्न का पूरा बिंदु उन परिचालनों के बारे में था जिन पर मेरा नियंत्रण नहीं है। डाउनलोडफाइल मेरी विधि नहीं है। – Kugel

+0

आप केवल तभी ऐसा कर सकते हैं जब एक Async संस्करण रद्दीकरण का समर्थन करता है (डाउनलोडफाइल के मामले में) है। –