ConcurrentDictionary TryGetValue vs [].[]仍然是线程安全的吗?

cru*_*ush 12 .net c#-4.0 concurrentdictionary

我有以下内容ConcurrentDictionary:

ConcurrentDictionary<Guid, Session> sessions;
Run Code Online (Sandbox Code Playgroud)

我知道这sessions.TryGetValue(key, out session)是线程安全的,但我的问题是,它sessions[key]是否也是线程安全的?

sessions.TryGetValue(key, out session) 返回true或false,具体取决于它是否能够获取值.

如果无法获得价值,会sessions[key]返回null吗?我想是的.任何人都可以确认或更多地阐明这一点吗?谢谢.

SLa*_*aks 15

它是线程安全的,但它不会返回null.

文件明确规定:

例外

KeyNotFoundException
检索该属性,并且该集合中不存在密钥.

  • @Chris:课程的重点是线程安全; 所有操作都是原子的.文档明确指出`ConcurrentDictionary <TKey,TValue>的所有公共成员和受保护成员都是线程安全的,可以从多个线程同时使用.但是,通过ConcurrentDictionary <TKey,TValue>实现的接口之一访问的成员(包括扩展方法)不能保证是线程安全的,并且可能需要由调用者同步. (2认同)
  • @BlackOverlord:这表示“通过其中一个接口访问的成员”,而不是由接口定义的成员。换句话说,显式接口实现。 (2认同)