Я пытаюсь реализовать ConcurrentDictionary, обернув его в BlockingCollection, но, похоже, не был успешным.Как скопировать ConcurrentDictionary в BlockingCollection?
Я понимаю, что одна переменная декларации работать с BlockingCollection, такие как ConcurrentBag<T>
, ConcurrentQueue<T>
и т.д.
Таким образом, чтобы создать ConcurrentBag завернутое в BlockingCollection я бы объявить и создать экземпляр так:
BlockingCollection<int> bag = new BlockingCollection<int>(new ConcurrentBag<int>());
но как это сделать для ConcurrentDictionary? Мне нужна блокирующая функциональность BlockingCollection как на стороне производителя, так и на потребителя.
Словарь (и ConcurrentDictionary тоже) не сохраняет порядок элементов. Можете ли вы описать свой сценарий производителя-потребителя? – Dennis
@ Dennis, я это знаю. Производитель хранит KeyValuePairs в concurrentDictionary, а потребительская задача увеличивает int и удаляет KeyValuePair, если int совпадает с соответствующим ключом. Я делаю это, потому что рабочие задачи заполняют concurrentDictionary со значениями, но в произвольном порядке, потребительская задача гарантирует, что полученные значения передаются/обрабатываются в правильном порядке. Можно ли заключить ConcurrentDictionary в BlockingCollection? –
Какое решение вы придумали? Я пытаюсь найти хорошее решение аналогичной проблемы, когда производитель не производит товары в порядке, необходимом для потребителя. (старый пост я знаю, но стоит попробовать) – Kim