private void ReleaseCachedConnection(NetworkSender sender) { lock (currentSenderCache) { lock (openNetworkSenders) { if (openNetworkSenders.Remove(sender)) { // only remove it once sender.Close(ex => { }); } } NetworkSender sender2; // make sure the current sender for this address is the one we want to remove if (currentSenderCache.TryGetValue(sender.Address, out sender2)) { if (ReferenceEquals(sender, sender2)) { currentSenderCache.Remove(sender.Address); } } } }