我有一个包含重复元素的并发 BlockingCollection
。如何修改它以添加或获取不同的元素?
最佳答案
BlockingCollection
的默认后备存储是 ConcurrentQueue
。正如其他人指出的那样,使用它添加不同的项目相当困难。
但是,您可以创建自己的实现 IProducerConsumerCollection
的集合类型,并将其传递给 BlockingCollection
构造函数。
想象一个 ConcurrentDictionary
,它包含当前在队列中的项目的键。要添加一个项目,首先要在字典上调用 TryAdd
,如果该项目不在字典中,则添加它,并将其添加到队列中。 Take
(和 TryTake
)从队列中获取下一个项目,将其从字典中删除,然后返回。
如果有一个并发的 HashTable
,我会更喜欢,但是因为没有,你将不得不使用 ConcurrentDictionary
。
关于c# - 并发集合和唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7652669/