我有一个重复元素的并发BlockingCollection
。如何修改它以添加或获取不同的元素?
答案 0 :(得分:4)
BlockingCollection
的默认后备存储是ConcurrentQueue
。正如其他人所指出的那样,使用它添加不同的项目相当困难。
但是,您可以创建自己的实现IProducerConsumerCollection
的集合类型,并将其传递给BlockingCollection
构造函数。
想象一个ConcurrentDictionary
,其中包含当前队列中项目的键。要添加项目,首先在字典上调用TryAdd
,如果项目不在字典中,则添加项目,并将其添加到队列中。 Take
(和TryTake
)从队列中获取下一个项目,将其从字典中删除,然后返回。
如果有并发HashTable
,我更愿意,但由于没有ConcurrentDictionary
,您将需要{{1}}。