我需要一个不允许重复的并发集合(在 BlockingCollection
中用作生产者/消费者)。
我不需要严格的元素顺序。
另一方面,我想尽量减少集合中元素“存活”的最长时间。 IE。收集不能是 LIFO,理想情况下它应该是 FIFO。
好吧,我会说我需要不允许重复的 ConcurrentQueue
,但是不允许重复的 ConcurrentBag
也可以。
为什么 C# 不包含类似的东西,而可能有人已经创建了它?
这个问题是我之前问题的结果 What type of IProducerConsumerCollection<T> to use for my task?
最佳答案
没有内置的 .Net 库将这组规则组合成一个集合。您有三个选择:
- 编写自己的集合类
- 使用两个集合:编写一个自定义类,使用一个 ConcurrentQueue 和任何自动检查重复项的基于集合的集合;已添加到 Set 运行,如果成功,则添加到 ConcurrentQueue;每次添加/删除都会在成功时添加到两个集合中
- 使用 ConcurrentQueue 但遍历整个列表以检查重复项
后两个不是很有效(一个有内存,另一个有 CPU、I/O、锁定)并且由于需要显式锁定而更加困惑,但可以完成任务。它们实现起来会更快,但如果权衡不符合您的要求,您将不得不选择选项 #1。
关于c# - 如何创建无重复的ConcurrentQueue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5845241/