AnonymousObserver<T>
Class to create an  IObserver<T> instance from delegate-based implementations of the On* methods.
            
                using System.Runtime.CompilerServices;
namespace System.Reactive
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(new byte[] {
        0,
        1
    })]
    public sealed class AnonymousObserver<[System.Runtime.CompilerServices.Nullable(2)] T> : ObserverBase<T>
    {
        private readonly Action<T> _onNext;
        private readonly Action<Exception> _onError;
        private readonly Action _onCompleted;
        public AnonymousObserver(Action<T> onNext, Action<Exception> onError, Action onCompleted)
        {
            if (onNext == null)
                throw new ArgumentNullException("onNext");
            _onNext = onNext;
            if (onError == null)
                throw new ArgumentNullException("onError");
            _onError = onError;
            if (onCompleted == null)
                throw new ArgumentNullException("onCompleted");
            _onCompleted = onCompleted;
        }
        public AnonymousObserver(Action<T> onNext)
            : this(onNext, Stubs.Throw, Stubs.Nop)
        {
        }
        public AnonymousObserver(Action<T> onNext, Action<Exception> onError)
            : this(onNext, onError, Stubs.Nop)
        {
        }
        public AnonymousObserver(Action<T> onNext, Action onCompleted)
            : this(onNext, Stubs.Throw, onCompleted)
        {
        }
        protected override void OnNextCore(T value)
        {
            _onNext(value);
        }
        protected override void OnErrorCore(Exception error)
        {
            _onError(error);
        }
        protected override void OnCompletedCore()
        {
            _onCompleted();
        }
        internal ISafeObserver<T> MakeSafe()
        {
            return new AnonymousSafeObserver<T>(_onNext, _onError, _onCompleted);
        }
    }
}