2011-09-22 32 views
5

¿Hay una manera de quitar un elemento específicode un BlockingCollection, así:Eliminación de un elemento específico de un BlockingCollection <>

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

en otras palabras: Quiero eliminar un elemento de una BlockingCollection <>, que se identifica mediante algún campo (por ejemplo, ID), no solo el siguiente artículo disponible.

¿Debo implementar getHashCode() o un IComparer?

Respuesta

7

BlockingCollection<> no lo ayudará aquí. Creo que necesitas ConcurrentDictionary<>.

+0

¿De ninguna manera a través de IComparer o HashCode? –

+1

¿Cómo ayudaría eso? 'BlockingCollection <>' no tiene ningún método que permita extraer elementos específicos. –

+0

Gracias por aclarar. El problema con ConcurrentDictionary <> es que no tiene orden. En mi escenario, necesito una cartera de elementos con la capacidad de eliminar un elemento priorizado de vez en cuando (desde el 'medio' de la tubería). El resto del tiempo los artículos deben procesarse FirstInFirstOut. Volveré a este hilo cuando tenga una solución. –

Cuestiones relacionadas