पृष्ठभूमि के लिए टास्क समानांतर पुस्तकालय प्रतिस्थापन?


83

क्या टास्क समानांतर लाइब्रेरी में ऐसा कुछ भी है जिसे बैकग्राउंडर वर्ग पर प्रतिस्थापन या सुधार माना जाएगा?

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


जवाबों:


91

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

मेरे पास अपने ब्लॉग पर एक उदाहरण है , BackgroundWorkerचीजों को करने का पुराना तरीका और चीजों को करने का नया Taskतरीका। मेरे पास कार्यों के लिए एक छोटा सहायक वर्ग है जिसे प्रगति की रिपोर्ट करने की आवश्यकता है, क्योंकि मुझे वाक्यविन्यास अजीब लगता है। उदाहरण में परिणाम मान, त्रुटि की स्थिति, रद्दीकरण और प्रगति रिपोर्टिंग शामिल हैं।


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

2
कुछ दिनों पहले मैंने विभिन्न पृष्ठभूमि प्रसंस्करण तकनीकों की तुलना लिखी थी । घोंसले के शिकार की अनुमति देता है BackgroundWorker, जबकि आसान प्रगति रिपोर्टिंग है Task। दोनों में से, मैं पसंद करता हूं Task(यह घोंसले के शिकार की तुलना में प्रगति रिपोर्टिंग को साफ करना बहुत आसान है)। वे दोनों प्रकाश वर्ष अन्य सामान्य समाधानों से आगे हैं, हालांकि। जब मैं उपयोग करने Threadवाले लोगों के बारे में सुनता हूं या मैं क्रैंग करता हूं ThreadPool.QueueUserWorkItem। वे पृष्ठभूमि कार्यों के लिए सही ढंग से उपयोग करने के लिए सबसे कठिन हैं।
स्टीफन क्लीयर

आसान प्रगति रिपोर्टिंग? केवल तभी यदि आप प्रतिशत की रिपोर्ट करना चाहते हैं। किसी और चीज की रिपोर्ट करने के लिए शुरुआत की आवश्यकता होती है या सिंक्रोनाइज़ेशनकोटेक्स्ट.पोस्ट बदसूरती
पणगीतिस कनवास

5
@PanagiotisKanavos: आप किसी भी मनमानी वस्तु को पास कर सकते हैं userState। हालांकि, मेरी आखिरी टिप्पणी के बाद से 2.5 वर्षों में, के Taskसाथ पूरक है IProgress<T>और Progress<T>, जो क्लीनर और BackgroundWorkerप्रगति की तुलना में आसान हैं । आधुनिक कोड में, BackgroundWorkerअब और उपयोग करने का कोई कारण नहीं है।
स्टीफन क्लीयर

हाँ, मैंने अभी देखा। किसी तरह, यह पोस्ट सबसे ऊपर आया जब मैंने नए प्रश्न खोजने के लिए टीपीएल टैग पर क्लिक किया!
पनगोटियोटिस कानवासोस 19'13

23

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.