2017-04-03 4 views
0

を追加し、私はSignalRの2.2倍を使用して、私は、コードの特定のチャンクのまわりで私の頭を取得してトラブルを抱えていますSignalR ConnectionMappingはメソッド説明

Mircosoft in their documentation hereで説明したようにメモリ接続マッピングで実施しています。私は辞書からTryGetValueがnullの場合、その後、接続がは新しいが割り当てられ、が作成されたローカル変数接続

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); } } } 

目的は、ユーザーへのすべての接続をマッピングすることで理解が、AddメソッドでHashSetを指定されたキーのDictionaryに追加し、ifステートメントを実行します。それ以外の場合は、キーに割り当てられているものがすべて格納されます。

なぜ、できconnections.Add(connectionId)効果一見直接

答えて

0

_connections.TryGetValueがある辞書にアクセスすることなく、既に辞書内の項目の値。成功した場合は、outパラメータとして、指定されたキーに対してconnectionsが返されます。偽の場合は、新しいHashSetが作成され、辞書に追加されます。 2番目のlockの前に有効なconnectionsへの参照があります(すでに辞書に入っていて、検索されたか、または追加されただけなので)。新しい接続を追加できます。