2017-04-03 70 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(或者因爲它已經在字典中並且已被檢索或者因爲它剛剛添加),並且您只需添加一個新連接即可。