我需要一个不允许重复的共同集合(在BlockingCollection中用作生产者/消费者)。 我不需要严格的元素顺序。 从另一方面,我想尽量减少元素“生活”收集的最大时间。即收集一定不能是LIFO,理想情况下它应该是FIFO。如何创建不重复的ConcurrentQueue?
那么我会说,我需要ConcurrentQueue没有重复允许,但ConcurrentBag没有重复也可以工作。
为什么C#不包含这样的东西,可能有人已经创建了它?
这个问题我刚才的问题的结果What type of IProducerConsumerCollection<T> to use for my task?
C#只是一种语言,你必须寻找一个库来获得这样的功能。像.NET框架一样,ConcurrentQueue/Bag的主页。没有人考虑过这样写代码,它注定要失败。因为你无法准确预测生产者何时生产和消费者消费。确定何时消除重复数据大致类似于根据Random.Next()的返回值做出决定。无论什么原因你必须实现这样的事情:它注定要失败。 – 2011-05-01 00:01:19
我不明白为什么它注定要失败。我可以使用ConcurrentDictionary来模拟Set(我将只使用key,value将始终为null)。我不想消除重复。应该没有重复。 – javapowered 2011-05-01 07:08:03
此外,“坚果壳中的C#”指出可以编写并发堆栈:“但是,如果您编写了自己的并发集合以禁止重复,但是如果元素已经存在,则会使TryAdd返回false(例如,如果您写了并发集合)“ – javapowered 2011-05-01 09:13:11