c# - 如何创建无重复的ConcurrentQueue?

标签 c# collections concurrency blockingcollection concurrent-queue

我需要一个不允许重复的并发集合(在 BlockingCollection 中用作生产者/消费者)。 我不需要严格的元素顺序。 另一方面,我想尽量减少集合中元素“存活”的最长时间。 IE。收集不能是 LIFO,理想情况下它应该是 FIFO。

好吧,我会说我需要不允许重复的 ConcurrentQueue,但是不允许重复的 ConcurrentBag 也可以。

为什么 C# 不包含类似的东西,而可能有人已经创建了它?

这个问题是我之前问题的结果 What type of IProducerConsumerCollection<T> to use for my task?

最佳答案

没有内置的 .Net 库将这组规则组合成一个集合。您有三个选择:

  1. 编写自己的集合类
  2. 使用两个集合:编写一个自定义类,使用一个 ConcurrentQueue 和任何自动检查重复项的基于集合的集合;已添加到 Set 运行,如果成功,则添加到 ConcurrentQueue;每次添加/删除都会在成功时添加到两个集合中
  3. 使用 ConcurrentQueue 但遍历整个列表以检查重复项

后两个不是很有效(一个有内存,另一个有 CPU、I/O、锁定)并且由于需要显式锁定而更加困惑,但可以完成任务。它们实现起来会更快,但如果权衡不符合您的要求,您将不得不选择选项 #1。

关于c# - 如何创建无重复的ConcurrentQueue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5845241/

相关文章:

c# - db4o 客户端/服务器似乎一次只能处理一个查询?

java - 例如,调用 notifyAll 的顺序如何影响 Java 中的执行?

c# - 如何从 C# 中存储为对象的 object[] 进行转换

javascript - 将带有列表的 JS 对象转换为 C# 列表

java - 惰性列表复制(写入时复制)

c# - 集合上下文中 ReadOnlyCollection string[] 之间的区别

php - Laravel:找出变量是否是集合

c# - 连接到 Azure Function 中的 Azure Analysis Services

c# - 在 MVC 5 中正确设置 DropDownListFor

c++ - std::vector 的并行写入器和读取器