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