一个Blocking Concurrent Collection-Take方法,用于获取支持某个条件的项
本文关键字:支持 条件 获取 用于 Concurrent Blocking Collection-Take 方法 一个 | 更新日期: 2023-09-27 18:27:53
我希望有一个并发集合,它支持阻塞线程安全的Take
操作,而实际获取的项是满足条件的项。
类似于:
private TheBlockingCollection<MyClass> _myCollection;
MyClass myItem = _myCollection.TakeItemWhere(item => item.Type.equals(something));
最终目标是获取集合中当前存在的具有最高属性值的项。例如-最大
有这样的内置收藏吗?
如果没有,还有什么更好的选择?
正如Servy在上面的评论中提到的,您应该使用带有BlockingCollection的优先级队列。
如果您为存储在集合中的类型实现了适当的IComparable<>
接口,那么当您将项目出列时,您将根据您定义的比较接口自动获得第一个项目。
Microsoft提供了一个实现IProducerConsumerCollection
的示例ConcurrentPriorityQueue
,您可以将其与BlockingCollection一起使用。
您可以通过首先创建ConcurrentPriorityQueue
的实例,然后使用接受IProducerConsumerCollection<T>
的构造函数之一创建BlockingCollection来使用它,例如:http://msdn.microsoft.com/en-us/library/dd287133.aspx
您只需要将ConcurrentPriortyQueue
传递给该构造函数。