Domanda

Mi piace il funzionamento senza blocco del CONCURRURENTDICTARY e usarloDue oggetti:

 ConcurrentDictionary<datetime,myObj> myIndexByDate
 ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index
.

Questi due oggetti devono rimanere in sincronia.È l'unico modo per farlo è usare un blocco, evitando così tutti i vantaggi del dizionario concorrente?

È stato utile?

Soluzione

Creerei una classe personalizzata con 2 dizionari e utilizzare un blocco solo sui metodi che sono suscettibili di cambiare il dizionario (aggiungi, cancella).

Non perdi i vantaggi del dizionario concorrente in quanto questo metodo richiede molto meno codice di quello che dovresti fare usando il dizionario normale.

Altri suggerimenti

ConcurrentDictionary è solo "thread-safe" sulle operazioni su un'istanza particolare.per esempio.Mentre viene invocata una chiamata ConcurrentDictionary.tryAdd () () (), nessun altro thread può modificare la collezione ...

Questo non significa che mentre ottieni un valore da un dizionario e aggiungilo a un altro dizionario che il valore esiste ancora nel dizionario originale mentre lo stai aggiungendo al secondo.

Probabilmente hai un invariante che detagli che mentre stai spostando un valore da un dizionario all'altro, nessun valore nel dizionario originale può essere rimosso (o almeno il valore , ma questo èUn po 'più difficile da garantire con conncurrentdictionary.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top