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();
            }
        }