<PackageReference Include="Relativity.Transfer.Client" Version="7.2.7" />
PushToPullSink<TSource, TResult>
using System.
Collections;
using System.
Collections.
Generic;
namespace System.
Reactive.
Linq.
ObservableImpl
{
internal abstract class PushToPullSink<
TSource,
TResult> :
IObserver<
TSource>,
IEnumerator<
TResult>,
IDisposable,
IEnumerator
{
private readonly IDisposable _subscription;
private bool _done;
public TResult Current { get; set; }
object IEnumerator.
Current {
get {
return Current;
}
}
public PushToPullSink(
IDisposable subscription)
{
_subscription =
subscription;
}
public abstract void OnNext(
TSource value);
public abstract void OnError(
Exception error);
public abstract void OnCompleted();
public abstract bool TryMoveNext(
out TResult current);
public bool MoveNext()
{
if (!
_done) {
if (
TryMoveNext(
out TResult current)) {
Current =
current;
return true;
}
_done =
true;
_subscription.
Dispose();
}
return false;
}
public void Reset()
{
throw new NotSupportedException();
}
public void Dispose()
{
_subscription.
Dispose();
}
}
}