c# - 并发集合和唯一元素

标签 c# parallel-processing blockingcollection

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

最佳答案

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

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

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

如果有一个并发的 HashTable,我会更喜欢,但是因为没有,你将不得不使用 ConcurrentDictionary

关于c# - 并发集合和唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7652669/

相关文章:

c# - 为什么 ArrayPool 上的分配比 Stack 上的分配快?

c# - 线程安全 Parallel.For c#

c# - 将 for 循环更改为 Parallel.For 循环

c# - 使用 WPF 窗体 DataGrid、DataTable 和 Combobox

javascript - 通过 C# 在 EmailTemplate.html 中打印数组

c# - Winform 数据 GridView 。如何从设计器添加自定义列?

并行运行多个php脚本的PHP脚本

java - 为什么PriorityBlockingQueue队列没有​​按照优先级对元素进行排序

c# - 检查阻塞集合中的重复项

c# - 一次阻塞收集过程 n 个项目 - 一旦完成 1 个就继续