Estaba buscando un método en ConcurrentDictionary que me permitiera eliminar una entrada por clave, si y solo si el valor es igual al que especifico, algo así como el equivalente de TryUpdate, pero para remociones.Método de eliminación concurrentemente concurrente de ConcurrentDictionary
El único método que hace esto parece ser el siguiente método:
ICollection<KeyValuePair<K, V>>.Remove(KeyValuePair<K, V> keyValuePair)
Es la aplicación explícita de la interfaz ICollection, en otras palabras, tiene que emitir mi ConcurrentDictionary a un ICollection primero para que me puede llamar a Eliminar.
Quitar hace exactamente lo que quiero, y que reparto es nada del otro mundo tampoco, también se muestra el código fuente se llama al método privado TryRemovalInternal con bool matchValue = true, por lo que todo parece agradable y limpio.
Lo que me preocupa un poco, sin embargo, es el hecho de que no se documenta como el método Remove optimismo concurrente de ConcurrentDictionary, por lo http://msdn.microsoft.com/en-us/library/dd287153.aspx simplemente duplica la ICollection repetitivo, y la How to: Add and Remove Items from a ConcurrentDictionary no menciona que el método sea.
¿Alguien sabe si ese es el camino a seguir, o hay algún otro método que me falta?
Parece correcto (dado que es el mismo método que las llamadas 'TryRemove', solo con' matchValue' establecido como falso y 'oldValue' predeterminado) –
Aunque no es un documento oficial, puede ser útil: http: // blogs. msdn.com/b/pfxteam/archive/2011/04/02/10149222.aspx – alexm
@alexm Esto es bastante tranquilizador: si lo conviertes en una respuesta, ¡lo aceptaré! MS realmente debería actualizar su documentación, si es cierto que últimamente han "visto a mucha gente pedir más soporte en ConcurrentDictionary" ... –