2017-04-03 40 views
0

我使用SignalR 2.2倍和通过的Mircosoft in their documentation hereSignalR ConnectionMapping添加方法说明

我无法让我的头周围的代码块特定的解释在内存连接映射实现。我理解的目的是将所有的连接映射到用户,但在添加方法

public void Add(T key, string connectionId) 
    { 
     lock (_connections) 
     { 
      HashSet<string> connections; 
      if (!_connections.TryGetValue(key, out connections)) 
      { 
       connections = new HashSet<string>(); 
       _connections.Add(key, connections); 
      } 

      lock (connections) 
      { 
       connections.Add(connectionId); 
      } 
     } 
    } 

局部变量创建连接,那么如果从字典中TryGetValue为null,则连接分配新HashSet并将其添加到指定密钥的Dictionary中,然后逐出if语句,否则将使用分配给密钥的内容进行填充。

为什么然后可以connections.Add(的ConnectionId)效果的项目已经在字典的值而不看似直接

回答

0

访问字典有_connections.TryGetValue。如果成功,您将返回给定密钥connections作为out参数。如果它是假的,则创建一个新的HashSet并将其添加到字典中。在第二个lock之前,您可以参考有效的connections(或者因为它已经在字典中并且已被检索或者因为它刚刚添加),并且您只需添加一个新连接即可。