2010-08-18 16 views
75

क्या कार्य समानांतर लाइब्रेरी में कुछ भी है जिसे पृष्ठभूमिवर्कर वर्ग पर प्रतिस्थापन या सुधार माना जाएगा?पृष्ठभूमि वर्कर के लिए समानांतर लाइब्रेरी प्रतिस्थापन कार्य?

मैं एक जादूगर शैली UI के साथ एक WinForms अनुप्रयोग है, और यह कुछ लंबे समय से चल रहे कार्यों करता है। मैं मानक प्रगति पट्टी और ऑपरेशन रद्द करने की क्षमता के साथ एक उत्तरदायी यूआई प्राप्त करने में सक्षम होना चाहता हूँ। मैंने पृष्ठभूमिवर्कर के साथ पहले यह किया है, लेकिन मुझे आश्चर्य है कि कुछ टीपीएल पैटर्न हैं जिनका उपयोग इसके बजाय किया जा सकता है?

+0

यह भी देखें http://stackoverflow.com/questions/4054263/how-does-c-sharp-5-0s-async-await-feature-differ-from-the-tpl और http://stackoverflow.com/प्रश्न/12414601/async-का इंतजार-बनाम-BackgroundWorker – nawfal

उत्तर

87

Task वर्ग BackgroundWorker ऊपर एक सुधार है; यह स्वाभाविक रूप से घोंसले (माता पिता/बच्चे कार्यों) का समर्थन करता है, नए रद्द एपीआई, कार्य निरंतरता, आदि

I have an example on my blog, बातें और काम करने के नए Task तरह से कर रही है के पुराने BackgroundWorker रास्ता दिखा उपयोग करता है। मेरे पास उन कार्यों के लिए एक छोटी सहायक वर्ग है जो प्रगति की रिपोर्ट करने की आवश्यकता है, क्योंकि मुझे सिंटैक्स बल्कि अजीब लगता है। उदाहरण परिणाम मान, त्रुटि शर्तों, रद्दीकरण, और प्रगति रिपोर्टिंग शामिल हैं।

+0

कठिन इस और हैच के जवाब के बीच तय से लाभ होगा। हालांकि, आपका ब्लॉग दिखाता है कि नई कार्य वर्ग का उपयोग कैसे करें, और यह वही है जो मैं खोज रहा था - BackgroundWorker से एक विकास। मैं आपके आवेदन में कोड के आधार के रूप में अपना उदाहरण उपयोग कर रहा हूं। –

+2

कुछ दिन पहले मैं लिखा एक [विभिन्न पृष्ठभूमि प्रसंस्करण तकनीकों की तुलना] (http://nitoprograms.blogspot.com/2010/08/various-implementations-of-asynchronous.html)। 'पृष्ठभूमिवर्कर' की आसान प्रगति रिपोर्टिंग है, जबकि 'टास्क' घोंसले की अनुमति देता है। दोनों में से, मैं 'कार्य' पसंद करता हूं (नेस्टिंग की अनुमति देने के बजाय प्रगति रिपोर्टिंग को साफ करना * अधिक * आसान है)। हालांकि, वे अन्य सामान्य समाधानों से पहले हल्के सालों दोनों हैं। जब मैं 'थ्रेड' या 'थ्रेडपूल.क्यूयूउसर वर्कइटम' का उपयोग कर लोगों के बारे में सुनता हूं तो मैं चिल्लाता हूं। वे पृष्ठभूमि कार्यों के लिए सही ढंग से उपयोग करने के लिए सबसे कठिन हैं। –

+0

आसान प्रगति रिपोर्टिंग? केवल तभी आप एक प्रतिशत की रिपोर्ट करना चाहते हैं। कुछ और रिपोर्टिंग BeginInvoke या SynchronizationContext.Post कुरूपता –

23

पृष्ठभूमि कार्यकर्ता अभी भी इसे प्राप्त करने का एक वैध तरीका है - यदि आप एक साथ कई बड़े परिचालन चला रहे हैं तो समांतर एक्सटेंशन विचार करने योग्य होंगे, अगर यह सिर्फ एक है तो मैं पृष्ठभूमि कार्यकर्ता के साथ रहूंगा।

+2

और BGW के बाद से अपने तकनीकी रूप से एक सही जवाब है सुधार ThreadPool –

संबंधित मुद्दे