当前位置: 首页 > 编程语言 > C#

检查阻塞集合中的重复项Share

时间:2023-04-10 21:17:54 C#

CheckingforDuplicatesinaBlockingCollection基本上我不想向BlockingCollection添加重复项。您必须实现自己的IProducerConsumerCollection,其行为类似于集合(例如,不允许重复)。这是一个使用临界区(C#lock)使其线程安全的简单版本。对于高并发场景,可以像ConcurrentQueue一样使用SpinWait等类来提升性能。公共类ProducerConsumerSet:IProducerConsumerCollection{readonlyobjectgate=newobject();只读队列queue=newQueue();readonlyHashSethashSet=newHashSet();publicvoidCopyTo(T[]array,intindex){if(array==null)thrownewArgumentNullException("array");}if(indexGetEnumerator(){Listlist=null;lock(gate)list=queue.ToList();returnlist.GetEnumerator();}IEnumeratorIEnumerable.GetEnumerator(){returnGetEnumerator();}}如果需要,你可以指定此类通过提供可选的IEqualityComparer来自定义相等性,然后使用它来初始化HashSet。当尝试插入重复项时,IProducerConsumerCollection.Add方法返回false。这会导致BlockingCollection.Add方法抛出InvalidOperationException,因此您可能希望包装代码以将项目添加到类似以下内容:boolAddItem(BlockingCollectionblockingCollection,Titem){try{blockingCollection.Add(item);返回真;}catch(InvalidOperationException){返回false;请注意,如果您将项目添加到已完成的集合中,您还将获得InvalidOperationException,并且必须检查异常消息以确定异常的根本原因。使用TryAdd(数据)方法。您还可以传入一个timespan对象或一个int来指示超时。返回真或假。请注意,如果基础集合类型无法处理重复项并且您尝试添加的数据是重复项,则会抛出InvalidOperationException。以上就是C#学习教程:检查防止集合重复。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: