2012-01-20 16 views
5

मेरे पास एक विंडोज सेवा चल रही है जो नेटवर्क ड्राइव से फ़ोल्डरों को हटा देती है। मैं एसिंक्रोनस को हटाना चाहता हूं। यह कैसे किया जा सकता है?एक फ़ोल्डर को असीमित रूप से कैसे हटाएं

अभी मैं निर्देशिका के माध्यम से पाशन कर रहा हूँ और बुला

Directory.Delete(fullPath, true); 

धन्यवाद

+0

यह देखने में बहुत मुश्किल है कि सेवा में इसकी आवश्यकता क्यों होगी, वे पहले से ही धागे का उपयोग करते हैं। आप दूसरे का उपयोग कर सकते हैं। –

+0

विंडोज सेवा को अतुल्यकालिक रूप से क्यों करना चाहिए? यह वैसे भी पृष्ठभूमि में चलता है। लंबे समय तक चलने वाले संचालन के दौरान इसे ठंडा करने के बजाय यूआई उत्तरदायी रखने के लिए आमतौर पर असिंक्रोनस ऑपरेशंस का उपयोग किया जाता है। –

+1

@ ओलिवियर जैकोट-डेस्कोम्ब्स: विंडोज़ सेवा को प्रारंभ/बंद अनुरोधों के लिए उत्तरदायी होना चाहिए। –

उत्तर

9

मैं टास्क समानांतर लाइब्रेरी का प्रयोग करेंगे:

Task.Factory.StartNew(path => Directory.Delete((string)path, true), fullPath); 
+3

+1; मुझे इससे हराएं। और स्थानीय पर बंद होने के बजाय पैरामीटर को पारित करने के हल्के वजन दृष्टिकोण का उपयोग करने के लिए कुडोस। –

+0

@vcsjones: क्या यह विधि को अतुल्यकालिक तरीके से कॉल करने जैसा होगा और फिर इसे बाद में आईओ थ्रेड द्वारा चुना जाएगा? – stackoverflowuser

+2

@stackoverflowuser यह किसी कार्य में 'Directory.Delete' को कॉल करेगा; जो (शायद - शायद) थ्रेड पूल से एक धागा होगा। यह आपके कोड को जारी रखने की अनुमति देगा जबकि डिलीट किसी अन्य थ्रेड पर हो रहा है। – vcsjones

1

आप पाशन रहे हैं, तो आप एक इस्तेमाल कर सकते हैं समांतर foreach

 

// assuming that you have a list string paths. 
// also assuming that it does not matter what order in which you delete them 
Parallel.ForEach(theListOfDirectories, (x => Directory.Delete(x)); 
 
संबंधित मुद्दे