2010-04-20 9 views
12

Ho iniziato a utilizzare il nuovo ConcurrentDictionary da .Net4 per implementare un semplice caching per un progetto di threading.A .Net4 Gem: The ConcurrentDictionary - Tips & Tricks

Ma mi chiedo che cosa devo occuparmi di/prestare attenzione quando lo si utilizza?

Quali sono state le tue esperienze?

risposta

20

I membri sono thread-safe, ma non è necessario prevedere una sequenza di chiamate per essere thread-safe. Per esempio non si può pretendere quanto segue per essere thread-safe:

if (!dictionary.ContainsKey(key)) 
{ 
    // Another thread may have beaten you to it 
    dictionary.Add(key, value); 
} 

Al contrario, utilizzare la nuova API thread-safe - per esempio AddOrUpdate (l'ultimo vince in caso di condizioni di gara) o GetOrAdd (il primo vince in caso di condizioni di gara).

+0

Joe molto utile Grazie! +1 – SDReyes

+0

Questa è una risposta molto migliore rispetto alla risposta accettata. – Martin

+0

Adesso aspetterò più risposte, Martin. Grazie:) – SDReyes

-1

ConcurrentDictionary è thread-safe. Non devi preoccuparti nemmeno quando lo usi da più thread.

+0

I metodi di valore del valore utilizzati in 'GetOrAdd()' e 'AddOrUpdate()' non sono protetti da thread, tuttavia è necessaria una certa attenzione. – roken

2

Non ho avuto problemi con gli oggetti di raccolta Concurrent finora. Sono un'enorme spinta alla mia produttività permettendomi di non preoccuparsi di problemi di concorrenza con le raccolte e concentrarmi sulla scrittura della logica dell'applicazione.

Questo non vuol dire che non ci siano problemi. Solo niente di cui mi sono imbattuto.

+0

Grazie Caos +1 – SDReyes

Problemi correlati