一个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));

最终目标是获取集合中当前存在的具有最高属性值的项。例如-最大

有这样的内置收藏吗?

如果没有,还有什么更好的选择?

一个Blocking Concurrent Collection-Take方法,用于获取支持某个条件的项

正如Servy在上面的评论中提到的,您应该使用带有BlockingCollection的优先级队列。

如果您为存储在集合中的类型实现了适当的IComparable<>接口,那么当您将项目出列时,您将根据您定义的比较接口自动获得第一个项目。

Microsoft提供了一个实现IProducerConsumerCollection的示例ConcurrentPriorityQueue,您可以将其与BlockingCollection一起使用。

您可以通过首先创建ConcurrentPriorityQueue的实例,然后使用接受IProducerConsumerCollection<T>的构造函数之一创建BlockingCollection来使用它,例如:http://msdn.microsoft.com/en-us/library/dd287133.aspx

您只需要将ConcurrentPriortyQueue传递给该构造函数。