Вы хотите, чтобы BehaviorSubject<T>
или ReplaySubject<T>
.
BehaviorSubject<T>
воспроизводило одно последнее значение и требует, чтобы вы задали начальное значение в конструкторе.
Вы используете егокак это:
var bs = new BehaviorSubject<int>(0);
bs.Subscribe(x => Console.WriteLine(x));
bs.OnNext(42);
bs.Subscribe(x => Console.WriteLine(x));
Это вывело бы 0
, затем 42
, затем 42
на консоль.
ReplaySubject<T>
немного более общий.Он позволяет вам указать количество значений для воспроизведения, но не требует, чтобы вы указали начальное значение.
var rs = new ReplaySubject<int>(1);
rs.Subscribe(x => Console.WriteLine(x));
rs.OnNext(42);
rs.Subscribe(x => Console.WriteLine(x));
Это создает 42
, а затем 42
для консоли.
Сравните это со стандартным Subject<T>
.
var s = new Subject<int>();
s.Subscribe(x => Console.WriteLine(x));
s.OnNext(42);
s.Subscribe(x => Console.WriteLine(x));
Это просто производит 42
.