C# 信号器连接映射添加方法说明
我正在使用SignalR 2.2x并实现内存中的连接映射,正如Mircosoft所解释的那样 我很难理解一段特定的代码。我理解其目的是将所有连接映射到用户,但在Add方法中除外C# 信号器连接映射添加方法说明,c#,dictionary,signalr,C#,Dictionary,Signalr,我正在使用SignalR 2.2x并实现内存中的连接映射,正如Mircosoft所解释的那样 我很难理解一段特定的代码。我理解其目的是将所有连接映射到用户,但在Add方法中除外 public void Add(T key, string connectionId) { lock (_connections) { HashSet<string> connections; if (!_connecti
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);
}
}
}
public void添加(T键,字符串连接ID)
{
锁定(_连接)
{
哈希集连接;
if(!\u connections.TryGetValue(键,输出连接))
{
连接=新的HashSet();
_连接。添加(键,连接);
}
锁(连接)
{
connections.Add(connectionId);
}
}
}
创建局部变量连接,然后如果字典中的TryGetValue为null,则为连接分配一个新的哈希集,并将其添加到指定键的字典中,然后退出if语句,否则将使用分配给键的任何内容填充它
那么,为什么connections.Add(connectionId)可以影响字典中已有项的值,而不直接访问字典存在
\u connections.TryGetValue
。如果成功,它将返回给定键的连接
,作为输出
参数。如果为false,将创建一个新的HashSet
,并将其添加到字典中。在第二次锁定之前
您有一个对有效连接的引用
(因为它已经在字典中并被检索到,或者因为它刚刚被添加),您可以向它添加一个新连接