Cercavo un metodo in ConcurrentDictionary che mi consenta di rimuovere una voce per chiave, se e solo se il valore è uguale a uno specificato, qualcosa come l'equivalente di TryUpdate, ma per traslochi.ConcurrentDictionary in modo ottimistico simultaneo Metodo di rimozione
L'unico metodo che fa questo sembra essere questo metodo:
ICollection<KeyValuePair<K, V>>.Remove(KeyValuePair<K, V> keyValuePair)
E 'l'implementazione esplicita dell'interfaccia ICollection, in altre parole, devo lanciare la mia ConcurrentDictionary a un ICollection prima in modo che io puoi chiamare Rimuovi.
Rimuovere fa esattamente quello che voglio, e che cast è un grosso problema sia, anche il codice sorgente mostra richiama il metodo privato TryRemovalInternal con bool matchValue = true, quindi sembra tutto bello e pulito.
Quello che mi preoccupa un po 'è però il fatto che non è documentato come il metodo Remove ottimismo concomitante di ConcurrentDictionary, quindi http://msdn.microsoft.com/en-us/library/dd287153.aspx basta duplica il boilerplate ICollection, e il How to: Add and Remove Items from a ConcurrentDictionary non dice che il metodo sia.
Qualcuno sa se questa è la strada da percorrere, o c'è qualche altro metodo che mi manca?
Sembra giusto (poiché è lo stesso metodo che chiama "TryRemove' chiama, solo con' matchValue' imposta false e 'oldValue' è predefinito) –
Anche se non è un documento ufficiale, può essere utile: http: // blog. msdn.com/b/pfxteam/archive/2011/04/02/10149222.aspx – alexm
@alexm Questo è abbastanza rassicurante - Se lo trasformi in una risposta, lo accetto! MS dovrebbe davvero aggiornare la propria documentazione, se è vero che ultimamente hanno "visto diverse persone chiedere ulteriore supporto su ConcurrentDictionary" ... –