Does using ConcurrentDictionary TryGetValue within an if statement make the if contents thread-safe?
c#, concurrency
Solution
Yes you have to lock inside the if statement the only guarantee you get from concurrent dictionary is that its methods are thread save.
Problem
If I have a ConcurrentDictionary and use the TryGetValue within an if statement, does this make the if statement's contents thread safe? Or must you lock still within the if statement? Example: ``` ConcurrentDictionary<Guid, Client> m_Clients; Client client; //Does this if make the contents within it thread-safe? if (m_Clients.TryGetValue(clientGUID, out client)) { //Users is a list. client.Users.Add(item); } ``` or do I have to do: ``` ConcurrentDictionary<Guid, Client> m_Clients; Client client; //Does this if make the contents within it thread-safe? if (m_Clients.TryGetValue(clientGUID, out client)) { lock (client) { //Users is a list. client.Users.Add(item); } } ```