并发集合和独特元素

时间:2011-10-04 18:50:41

标签: c# parallel-processing blockingcollection

我有一个重复元素的并发BlockingCollection。如何修改它以添加或获取不同的元素?

1 个答案:

答案 0 :(得分:4)

BlockingCollection的默认后备存储是ConcurrentQueue。正如其他人所指出的那样,使用它添加不同的项目相当困难。

但是,您可以创建自己的实现IProducerConsumerCollection的集合类型,并将其传递给BlockingCollection构造函数。

想象一个ConcurrentDictionary,其中包含当前队列中项目的键。要添加项目,首先在字典上调用TryAdd,如果项目不在字典中,则添加项目,并将其添加到队列中。 Take(和TryTake)从队列中获取下一个项目,将其从字典中删除,然后返回。

如果有并发HashTable,我更愿意,但由于没有ConcurrentDictionary,您将需要{{1}}。