काफी सरल: ConcurrentDictionary के अलावा (जो मैं उपयोग करूँगा लेकिन यह वास्तव में सही अवधारणा नहीं है), क्या कोई समवर्ती संग्रह (IProducerConsumer कार्यान्वयन) है जो किसी आइटम की सामान्य समानता के आधार पर विशिष्ट वस्तुओं को हटाने का समर्थन करता है या निकालने के लिए एक शर्त परिभाषित एक भविष्यवाणी?समवर्ती संग्रह एक निर्दिष्ट आइटम को हटाने का समर्थन करता है?
स्पष्टीकरण: मेरे पास एक बहु थ्रेडेड, मल्टी-स्टेज वर्कफ़्लो एल्गोरिदम है, जो डीबी से ऑब्जेक्ट खींचता है और उन्हें "प्रारंभ" कतार में चिपकाता है। वहां से वे अगले चरण तक पकड़ लेते हैं, आगे काम करते हैं, और अन्य कतारों में भर जाते हैं। यह प्रक्रिया कुछ और चरणों के माध्यम से जारी है। इस बीच, पहले चरण को अपने पर्यवेक्षक द्वारा फिर से बुलाया जाता है और वस्तुओं को डीबी से बाहर खींचता है, और उनमें प्रक्रियाएं अभी भी प्रक्रिया में शामिल हो सकती हैं (क्योंकि वे संसाधित होने के समाप्त नहीं हुए हैं और इसलिए ध्वज सेट के साथ फिर से बने नहीं रहे हैं वे कर रहे हैं)।
जो समाधान मैं डिजाइन कर रहा हूं वह एक "काम में" संग्रह है; ऑब्जेक्ट्स उस कतार में जाते हैं जब उन्हें पहले चरण में प्रसंस्करण के लिए पुनर्प्राप्त किया जाता है, और उन्हें वर्कफ़्लो के किसी भी चरण द्वारा "संसाधित" के रूप में डीबी में फिर से सहेजा जाने के बाद हटा दिया जाता है। हालांकि ऑब्जेक्ट उस सूची में है, लेकिन इसे पहले चरण से पुनः प्राप्त करने पर अनदेखा कर दिया जाएगा।
मैं एक ConcurrentBag उपयोग करने के लिए योजना बनाई थी, लेकिन केवल हटाने विधि (TryTake) बैग, नहीं एक निर्धारित एक से एक मनमाना आइटम को हटा (और ConcurrentBag .NET 4 में धीमी गति से है)। ConcurrentQueue और ConcurrentStack भी अगले एक के अलावा किसी अन्य आइटम को हटाने की अनुमति नहीं देता है, जो आपको प्रदान करेगा, जिससे ConcurrentDictionary छोड़ दिया जाएगा, जो काम करेगा लेकिन मुझे इसकी आवश्यकता से अधिक है (मुझे वास्तव में आवश्यक रिकॉर्ड के आईडी को स्टोर करना है; वे वर्कफ़्लो के दौरान नहीं बदलते हैं)।
आप ReaderWriterLockSlim और एक सूची का उपयोग कर के बारे में कैसा महसूस करते हैं? या शायद अपने स्वयं के समवर्ती संग्रह – Frobzig
@Frobzig रोलिंग - हल्के से रुचि रखने के लिए Ambivalent। मुझे समवर्ती संग्रह पसंद हैं क्योंकि वे सिर्फ काम करते हैं; बहुत कम कोड शामिल है। – KeithS