मैं एक विंडोज़ फॉर्म एप्लिकेशन (सी #) विकसित कर रहा हूं, और प्रोग्राम चल रहा है, यह ऑब्जेक्ट बनाता है उन्हें एक सूची में जोड़ता है। मुझे फीफो (पहली बार पहले बाहर) के साथ सूची में वस्तुओं को संसाधित करना होगा। मैं पृष्ठभूमि पृष्ठभूमि में ऐसा करना चाहता हूं और मुझे उन्हें क्रमशः संसाधित करना होगा, संख्या 1, संख्या 2, संख्या 3 और इसी तरह। और जैसे ही कोई आइटम सूची में जोड़ा जाता है, मैं इसे संसाधित करना चाहता हूं। तो मुझे उस सूची की जांच करने के लिए कुछ होना है।नौकरियों के लिए ब्लॉकिंग चयन या कतार <T>?
इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?
मुझे पता है कि ब्लॉकिंगकोलेक्शन कुछ ऐसा ही करता है, जो इसे प्रसंस्करण से पहले किसी आइटम को जोड़ने के लिए प्रतीक्षा करता है।
मैं कतार के साथ एक ही धागे का उपयोग कर सकता हूं और बस (सत्य) और यदि कोई है तो आइटम ले सकता है?
आपको क्या लगता है?
हाँ बिल्कुल! मैं सिर्फ यह सोच रहा हूं कि मेरे विचार की पुष्टि करने के लिए और अगर किसी के पास बेहतर विचार है :) – syncis
@ जोनाथन बेरहल्टर: या, 'टेक' को कॉल करने के बजाय, वह अपने पृष्ठभूमि धागे को ''GetConsumingEnumerable'] पर' foreach 'कर सकता है। (http://msdn.microsoft.com/en-us/library/dd287186.aspx), जो आइटम को 'ब्लॉकिंग कोलेक्शन' में रखा गया है, उतना ही उपज देगा। –
casperOne
@ सिंकिस: 'GetConsumingEnumerable' तब तक अवरुद्ध होगा जब तक कोई आइटम' ब्लॉकिंग कोलेक्शन 'में' आइटम 'की तरह नहीं जोड़ा जाएगा; बात यह है कि, इन वस्तुओं को संसाधित करने के अलावा आपका पृष्ठभूमि धागा क्या कर रहा है? यदि आप धागे को बचाने की कोशिश कर रहे हैं; नहीं, आप मूल रूप से थ्रेड पूल को फिर से लिख रहे हैं और यह आम तौर पर एक अच्छा विचार नहीं है। ध्यान दें, 'टेक' के लिए अधिक आइटम आ सकते हैं या 'GetConsumingEnumerable' के माध्यम से उत्पन्न होते हैं, जबकि आप अपनी वस्तुओं को एक-एक करके संसाधित कर रहे हैं (या आप अपनी आवश्यकताओं के आधार पर उन वस्तुओं को अन्य धागे में संसाधित करने के लिए भेज सकते हैं)। –
casperOne