CombineLatestObserver<T>
namespace System.
Reactive.
Linq.
ObservableImpl
{
internal sealed class CombineLatestObserver<
T> :
IObserver<
T>
{
private readonly object _gate;
private readonly ICombineLatest _parent;
private readonly int _index;
private readonly IDisposable _self;
private T _value;
public T Value =>
_value;
public CombineLatestObserver(
object gate,
ICombineLatest parent,
int index,
IDisposable self)
{
_gate =
gate;
_parent =
parent;
_index =
index;
_self =
self;
}
public void OnNext(
T value)
{
lock (
_gate) {
_value =
value;
_parent.
Next(
_index);
}
}
public void OnError(
Exception error)
{
_self.
Dispose();
lock (
_gate) {
_parent.
Fail(
error);
}
}
public void OnCompleted()
{
_self.
Dispose();
lock (
_gate) {
_parent.
Done(
_index);
}
}
}
}