0

我想要一个支持阻塞线程安全Take操作的并发集合,而实际采用的项目是满足条件的项目。

就像是:

private TheBlockingCollection<MyClass> _myCollection;

MyClass myItem = _myCollection.TakeItemWhere(item => item.Type.equals(something));

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

有这样的内置集合吗?

如果不是,那么更好的选择是什么?

4

1 回答 1

2

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

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

Microsoft 提供了一个示例ConcurrentPriorityQueueIProducerConsumerCollection您可以将其与 BlockingCollection 一起使用。

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

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

于 2013-08-15T14:50:56.697 回答