Rx.Net Использование Observable.Create вместо Subject

У меня есть код, который использует тему для создания наблюдаемой. Я могу передать значение в наблюдаемый поток с использованием subject.onNext (значение). Проблема в том, что если я подпишусь на это наблюдаемое после того, как значение будет передано, я бы хотел получить это значение. Из того, что я могу сказать, предметы не держат ценность, они просто передают их как событие. Итак, как мне изменить этот код с использования субъекта на использование Observable.

private readonly Subject<int> _valueSubject = new Subject<int>();
public IObservable<int> ValueObservable => _valueSubject ;

public void SetValue(int valuePassedIn)
{
    _valueSubject.OnNext(valuePassedIn);            
}

Изменить: Обнаружил, что вы можете получить последние значения с помощью BehaviorSubject, но все равно хотел бы знать, как использовать Observable.Create вместо Subject в сценарии, подобном этому.

1 ответ

Предполагая, что вам не нужно вызывать OnNext напрямую, холодная наблюдаемая может быть тем, что вы хотите:

IObservable<int> coldObservable = Observable.Create<int>(obs =>
{
    obs.OnNext(1);
    obs.OnNext(2);
    obs.OnNext(3);
    obs.OnCompleted();
    return () => { };
});

В противном случае ReplaySubject позволит вам сохранить размерный буфер значений, которые будут отправляться при подписке каждого наблюдателя. Не совсем то же самое, что вспоминать все значения, которые я понимаю, но в любом случае это не будет хорошей идеей из-за использования памяти. Может быть ближе, чем единственное значение, которое обеспечивает BehaviourSubject.

Следующее позволит 2 значениям быть доступными для новых подписчиков:

ISubject<int> replaySubject = new ReplaySubject<int>(2);
IObservable<int> observable;

[TestMethod]
public void TestMethod()
{
     observable = replaySubject;

     replaySubject.OnNext(1);
     replaySubject.OnNext(2);
     replaySubject.OnNext(3);
     replaySubject.OnNext(4);
     replaySubject.OnNext(5);

     observable.Subscribe(OnValue);
}

Выход:

Наблюдаемое значение:4 Наблюдаемое значение:5

Другие вопросы по тегам