public void Unsubscribe(NSubscription subscriptionToRemove) { var subscriptions = _subscriptions.Values.FirstOrDefault(x => x.Contains(subscriptionToRemove)); if (subscriptions == null) { return; } var queueCopy = new Queue <NSubscription>(); while (subscriptions.Any()) { queueCopy.Enqueue(subscriptions.Dequeue()); } while (queueCopy.Any()) { var sub = queueCopy.Dequeue(); if (sub == subscriptionToRemove) { continue; } subscriptions.Enqueue(sub); } }
public NSubscription Subscribe <TMessage>(Action <TMessage> action) { if (action == null) { throw new NPublisherException("Action must be not null."); } var subscription = new NSubscription(this, Convert(action)); if (!_subscriptions.ContainsKey(typeof(TMessage))) { _subscriptions.Add(typeof(TMessage), new Queue <NSubscription>()); } _subscriptions[typeof(TMessage)].Enqueue((subscription)); return(subscription); }
public static void UnsubscribeIt(NSubscription subscriptionToRemove) => Create().Unsubscribe(subscriptionToRemove);