Intento implementar un ConcurrentDictionary envolviéndolo en un BlockingCollection pero no parece tener éxito.Cómo envolver ConcurrentDictionary en BlockingCollection?
entiendo que una declaración de variables trabajan con BlockingCollection como ConcurrentBag<T>
, ConcurrentQueue<T>
, etc.
Por lo tanto, para crear un ConcurrentBag envuelto en una BlockingCollection yo anunciare y cree una instancia de esta manera:
BlockingCollection<int> bag = new BlockingCollection<int>(new ConcurrentBag<int>());
pero, ¿cómo hacerlo para ConcurrentDictionary? Necesito la funcionalidad de bloqueo de BlockingCollection tanto para el productor como para el consumidor.
El diccionario (y ConcurrentDictionary también) no conserva el orden de los elementos. ¿Puedes describir tu escenario productor-consumidor? – Dennis
@Dennis, soy consciente de eso. Un productor almacena KeyValuePairs en el concurrentDictionary, y una tarea de consumidor incrementa un int y elimina el KeyValuePair si el int coincide con la clave respectiva. Hago esto porque las tareas de los trabajadores llenan el Dictuario concurrente con valores, pero en orden arbitrario, la tarea del consumidor garantiza que los valores recibidos se pasen o se trabajen en el orden correcto. ¿Puede un ConcurrentDictionary ser envuelto en un BlockingCollection? –
¿Qué solución se te ocurrió? Estoy tratando de encontrar una buena solución a un problema similar donde el productor no produce artículos en el orden que necesita el consumidor. (Publicación anterior lo sé, pero vale la pena intentarlo) – Kim