Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is a linq query to ConcurrentDictionary Values threadsafe?

Tags:

c#

linq

.net-4.0

let's say I have the following code:

ConcurrentDictionary<long, long> myDict= new ConcurrentDictionary<long, long>(); 

Normally every access by key is threadsafe, but is also the following linq query threadsafe? I have not found anything in the docs: http://msdn.microsoft.com/en-us/library/dd287226.aspx

if myDict.Values.Any(x => !x.HasPaid)) {   return false } 
like image 564
Chris Avatar asked Jul 09 '10 21:07

Chris


People also ask

How do you find the value of ConcurrentDictionary?

To retrieve single item, ConcurrentDictionary provides TryGetValue method. We have to provide Key in the TryGetValue method. It takes the out parameter to return the value of key. TryGetValue returns true if key exists, or returns false if key does not exists in dictionary.

Is ConcurrentDictionary keys thread-safe?

Yes, its threadsafe.

Is ConcurrentDictionary thread-safe C#?

Concurrent. ConcurrentDictionary<TKey,TValue>. This collection class is a thread-safe implementation. We recommend that you use it whenever multiple threads might be attempting to access the elements concurrently.

What is the purpose of the ConcurrentDictionary TKey TValue class in C#?

ConcurrentDictionary<TKey, TValue> Class Represents a thread-safe collection of key-value pairs that can be accessed by multiple threads concurrently.


1 Answers

Correction... I'm not sure when you are accessing the Values property. It is thread safe when using LINQ on the object itself.


LINQ will use the GetEnumerator method to itterate the items.

Straight from MSDN

The enumerator returned from the dictionary is safe to use concurrently with reads and writes to the dictionary, however it does not represent a moment-in-time snapshot of the dictionary. The contents exposed through the enumerator may contain modifications made to the dictionary after GetEnumerator was called

if myDict.Any(x => !x.Value.HasPaid)) {   return false } 
like image 112
chilltemp Avatar answered Sep 18 '22 16:09

chilltemp