2011-09-22 142 views
5

有没有办法从BlockingCollection删除特定项目,像这样:从BlockingCollection <>删除特定项目

IMyItem mySpecificItem = controller.getTopRequestedItem(); 
bool took = myBlockingCollection<IMyItem>.TryTake(out mySpecificItem); 
if(took) 
    process(mySpecificItem); 
..... 
换句话说

:我想从一个BlockingCollection删除项目<>,它由一些字段(例如ID)标识,而不仅仅是下一个可用项目。

我需要实现getHashCode()还是IComparer?

回答

7

BlockingCollection<>不会帮你在这里。我认为你需要ConcurrentDictionary<>

+0

没有办法通过IComparer或HashCode? –

+1

这会有帮助吗? 'BlockingCollection <>'没有任何方法允许特定元素被拉出。 –

+0

感谢您的澄清。 ConcurrentDictionary <>的问题是没有顺序。在我的场景中,我需要一个物品管道,能够不时从管道中间删除优先项目。剩下的时间项目应该被处理FirstInFirstOut。当我有解决方案时,我会回到这个线程。 –