c# - How to use ThreadPool class -


  नाम स्थान थपूल {वर्ग का कार्यक्रम {निजी स्थिर लंबे मान = 0; निजी स्थिर स्ट्रिंग obj = string.Empty; स्थिर शून्य मुख्य (स्ट्रिंग [] एआरजीज़) {थ्रेड ओजथाह्रेड 1 = नया थ्रेड (नया थ्रेडस्टार्ट (वृद्धि मूल्य)); objThread1.Start (); धागा objThread2 = नया थ्रेड (नया थ्रेडस्टार्ट (वृद्धि मूल्य)); objThread2.Start (); objThread1.Join (); objThread2.Join (); कंसोल.प्रकाश लाइन ("वैल =" + वैल + "हालांकि यह" + (10000000 + 10000000) होना चाहिए); Console.ReadLine (); } प्राइवेट स्टैटिक void IncrementValue () {for (int i = 0; i & lt; 10000000; i ++) {मॉनिटर। एंटर (obj); वैल ++; Monitor.Exit (obj); }}}}  

मैं थ्रेड के प्रतिस्थापन में थ्रेडपूल वर्ग का उपयोग कैसे करूं? मॉनिटर?

थ्रेड पूल का उपयोग करने के कुछ तरीके हैं आपके कार्य के लिए, आपको निम्नलिखित पर विचार करना चाहिए।

  • यदि आपको बस सबसे आसान तरीका चलाने के लिए एक कार्य की आवश्यकता है तो QueueUserWorkItem का उपयोग करना है, जो केवल एक प्रतिनिधि को ले जाता है चलाते हैं। यह नुकसान यह है कि आपके पास नौकरी पर बहुत कम नियंत्रण है प्रतिनिधि कोई मान नहीं लौटा सकता है, और आप यह नहीं जानते कि रन कब पूरा हो गया है।
  • यदि आप थोड़ा अधिक नियंत्रण चाहते हैं, तो आप BeginInvoke / EndInvoke प्रतिनिधियों का इंटरफ़ेस का उपयोग कर सकते हैं। यह थ्रेड पूल थ्रेड पर चलाने के लिए कोड को निर्धारित करता है आप IAsyncResult संकेतन के माध्यम से BeginInvoke द्वारा वापस प्राप्त कर सकते हैं, और आप EndInvoke <के द्वारा परिणाम (साथ ही कार्यकर्ता धागा पर कोई अपवाद) प्राप्त कर सकते हैं < / code>।

ठीक से, एन्टर करें / पर बाहर निकलें का उपयोग करने के लिए, आपको यह सुनिश्चित करना होगा कि बाहर निकलें हमेशा कहा जाता है इसलिए आपको अपना बाहर निकलें कॉल अंत में ब्लॉक में रखना चाहिए।

हालांकि, अगर आपको एन्टर के लिए समयबाह्य मान प्रदान करने की आवश्यकता नहीं है, तो आप केवल lock कीवर्ड का उपयोग करके बेहतर होगा, जो Enter और Exit कॉल का उचित सेट में संकलित करता है


Comments