2017-04-03 1 views
0

추가 나는 SignalR의 2.2 배를 사용하고 내가 코드의 특정 덩어리 주위에 내 머리를 얻는 데 문제가 있어요SignalR ConnectionMapping이 방법 설명

Mircosoft in their documentation here에 의해 설명 된 바와 같이 메모리 연결 매핑에 구현하고있다. 나는 목적은 사용자에게 있지만 추가 방법

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) 효과를 보이는 _connections.TryGetValue이 있습니다 직접

답변

0

사전에 액세스하지 않고 이미 사전에있는 항목의 값. 성공하면 out 매개 변수로 주어진 키에 대해 connections을 리턴합니다. false이면 새 HashSet이 작성되어 사전에 추가됩니다. 두 번째 전에 lockconnections (이미 사전에 있었고 검색되었거나 방금 추가 되었기 때문에)에 대한 참조가 있으며 방금 새 연결을 추가 할 수 있습니다.