Я искал метод в ConcurrentDictionary, который позволил бы мне удалить запись по ключу, если и только если значение равно указанному мной, что-то вроде эквивалента TryUpdate , но дляremoveals.
Единственный метод, который делает это, кажется, этот метод:
ICollection<KeyValuePair<K, V>>.Remove(KeyValuePair<K, V> keyValuePair)
Это явная реализация интерфейса ICollection, другими словами, я должен привести свой ConcurrentDictionary ксначала ICollection, чтобы я мог вызвать Remove.
Remove выполняет именно то, что я хочу, и это приведение также не представляет особой проблемы, также исходный код показывает, что он вызывает закрытый метод TryRemovalInternal с bool matchValue =true , так что все выглядит красиво и чисто.
Однако меня немного беспокоит тот факт, что он не задокументирован как оптимистически параллельный метод Remove ConcurrentDictionary, поэтому http://msdn.microsoft.com/en-us/library/dd287153.aspx простодублирует шаблон ICollection и Как: добавлять и удалять элементы из ConcurrentDictionary также не упоминает этот метод.
Кто-нибудь знает, так ли это, или есть какой-то другой метод, который мне не хватает?