在if语句中使用ConcurrentDictionary TryGetValue是否会使if内容成为线程安全的?

Mau*_*imo 6 c# concurrency

如果我有ConcurrentDictionary,并且在if语句中使用TryGetValue,这是否会使if语句的内容线程安全?还是必须仍然锁定在if语句中?

例:

        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);
        }
Run Code Online (Sandbox Code Playgroud)

还是我必须做:

        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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

Raf*_*fal 6

是的,您必须锁定在if语句中,从并发字典获得的唯一保证是其方法是线程保存的。