Próbuję zaimplementować ConcurrentDictionary, zawijając go w BlockingCollection, ale nie wydaje się być skuteczne.Jak zawinąć ConcurrentDictionary w BlockingCollection?
Rozumiem, że jedna zmienna deklaracje współpracy z BlockingCollection takich jak ConcurrentBag<T>
, ConcurrentQueue<T>
itp
Tak więc, aby stworzyć ConcurrentBag zawinięte w BlockingCollection chciałbym zadeklarować i wystąpień tak:
BlockingCollection<int> bag = new BlockingCollection<int>(new ConcurrentBag<int>());
ale jak to zrobić dla ConcurrentDictionary? Potrzebuję funkcji blokowania BlockingCollection zarówno po stronie producenta, jak i konsumenta.
Słownik (i ConcurrentDictionary też) nie zachowuje kolejności przedmiotów. Czy możesz opisać swój scenariusz producent-konsument? – Dennis
@Dennis, jestem tego świadomy. Producent przechowuje KeyValuePairs w concurrentDictionary, a zadanie konsumenta inkrementuje int i usuwa KeyValuePair, jeśli int pasuje do odpowiedniego klucza. Robię to, ponieważ zadania robocze zapełniają concurrentDictionary wartościami, ale w dowolnej kolejności, zadanie klienta zapewnia, że odebrane wartości są przekazywane/przetwarzane we właściwej kolejności. Czy ConcurrentDictionary może być opakowany w BlockingCollection? –
Jakie rozwiązanie wymyśliłeś? Próbuję znaleźć dobre rozwiązanie podobnego problemu, gdy producent nie produkuje przedmiotów w kolejności wymaganej przez konsumenta. (stary post wiem, ale warto spróbować) – Kim