void RemoveSubscription(MessageSubscription sub) { lock (_gate) { _subscriptions = _subscriptions.Remove(sub); if (_subscriptions.Count == 0) { OnLastSubscriptionRemoved(); } } }
public IDisposable Subscribe(IObserver <IReadOnlyMessage> observer) { var sub = new MessageSubscription(s => RemoveSubscription(s), observer); lock (_gate) { _subscriptions = _subscriptions.Add(sub); if (_subscriptions.Count == 1) { OnFirstSubscriptionAdded(); } } return(sub); }