<PackageReference Include="System.Reactive" Version="4.1.6" />

MostRecent<TSource>

sealed class MostRecent<TSource> : PushToPullAdapter<TSource, TSource>
namespace System.Reactive.Linq.ObservableImpl { internal sealed class MostRecent<TSource> : PushToPullAdapter<TSource, TSource> { private sealed class _ : PushToPullSink<TSource, TSource> { private volatile NotificationKind _kind; private TSource _value; private Exception _error; public _(TSource initialValue) { _kind = NotificationKind.OnNext; _value = initialValue; } public override void OnNext(TSource value) { _value = value; _kind = NotificationKind.OnNext; } public override void OnError(Exception error) { Dispose(); _error = error; _kind = NotificationKind.OnError; } public override void OnCompleted() { Dispose(); _kind = NotificationKind.OnCompleted; } public override bool TryMoveNext(out TSource current) { switch (_kind) { case NotificationKind.OnNext: current = _value; return true; case NotificationKind.OnError: _error.Throw(); break; } current = default(TSource); return false; } } private readonly TSource _initialValue; public MostRecent(IObservable<TSource> source, TSource initialValue) : base(source) { _initialValue = initialValue; } protected override PushToPullSink<TSource, TSource> Run() { return new _(_initialValue); } } }