Резервным хранилищем по умолчанию для BlockingCollection
является ConcurrentQueue
. Как кто-то еще отметил, довольно сложно добавлять отдельные элементы, используя это.
Однако вы можете создать свой собственный тип коллекции, который реализует IProducerConsumerCollection
, и передать его конструктору BlockingCollection
.
Представьте себе ConcurrentDictionary
, который содержит ключи элементов, которые в данный момент находятся в очереди. Чтобы добавить элемент, сначала необходимо вызвать TryAdd
в словаре, а если элемент отсутствует в словаре, добавить его, а также добавить в очередь. Take
(и TryTake
) получить следующий элемент из очереди, удалить его из словаря и вернуть.
Я бы предпочел, если бы был одновременный HashTable
, но поскольку его нет, вам придется иметь дело с ConcurrentDictionary
.