private void Remove(ITransport instance) { if (instance == null) { return; } lock ( EstablishedTransports ) { var matches = EstablishedTransports.Where(t => object.ReferenceEquals(t.Value, instance)).Select(t => t.Key).ToArray(); foreach (var key in matches) { EstablishedTransports.Remove(key); } } lock ( RunningTransports ) { var matches = RunningTransports.Where(t => object.ReferenceEquals(t.Value, instance)).Select(t => t.Key).ToArray(); foreach (var key in matches) { RunningTransports.Remove(key); } } instance.Terminate(); }
private void Remove(ITransport instance) { if (instance == null) { return; } foreach (var one in EstablishedTransports.ToArray()) { one.Value.TryRemove(instance, out _); if (one.Value.IsEmpty) { EstablishedTransports.TryRemove(one.Key, out _); } } lock ( RunningTransports ) { RunningTransports.Remove(instance); } instance.Terminate(); }