Necesito una colección concurent que no permita duplicados (para usar en BlockingCollection como Productor/Consumidor). No necesito un orden estricto de elementos. De otra parte quiero minimizar el tiempo máximo de elemento "en vivo" en la colección. Es decir. la colección no debe ser LIFO, idealmente debe ser FIFO.cómo crear no-duplicados ConcurrentQueue?
Bueno, yo diría que necesito ConcurrentQueue sin duplicados permitidos, pero ConcurrentBag sin duplicados también podría funcionar.
¿Por qué C# no contiene nada de eso y probablemente alguien ya lo haya creado?
Esta pregunta es resultado de mi pregunta anterior What type of IProducerConsumerCollection<T> to use for my task?
C# es solo un lenguaje, tendrías que buscar una biblioteca para obtener funcionalidades como esa. Como el .NET framework, el hogar de ConcurrentQueue/Bag. Nadie jamás pensó escribir código así, está condenado al fracaso. Porque no puede predecir exactamente cuándo el productor produce y el consumidor consume. Decidir cuándo eliminar duplicados es más o menos análogo a tomar decisiones basadas en el valor de retorno de Random.Next(). Cualquiera sea la razón por la que tiene que implementar algo así: está condenado al fracaso. –
No entiendo por qué está condenado al fracaso. Puedo simular Set usando ConcurrentDictionary (usaré solo clave, el valor siempre será nulo). No quiero eliminar duplicados. No debe haber duplicados. – javapowered
Además, "C# en Cáscara de Nuez" establece que es posible escribir una pila concurrente: "Si escribía su propia colección simultánea que prohibía duplicados, haría que TryAdd devuelva falso si el elemento ya existía (un ejemplo sería si usted escribió un conjunto concurrente) " – javapowered