public IDisposable Subscribe(IObserver <T> observer) { lock (syncObject) { onNext += observer.OnNext; onError += observer.OnError; onCompleted += observer.OnCompleted; } return(new EventObserverCollectionHandle(this, observer)); }
private void Unsubscribe(IObserver <T> observer) { lock (syncObject) { // ReSharper disable DelegateSubtraction onNext -= observer.OnNext; onError -= observer.OnError; onCompleted -= observer.OnCompleted; // ReSharper restore DelegateSubtraction } }
public void UnsubscribeAll(bool sendOnCompleted) { var curCompleted = onCompleted; lock (syncObject) { onNext = null; onError = null; onCompleted = null; } if (sendOnCompleted) { curCompleted?.Invoke(); } }