Rx.Net 使用 Observable.Create 而不是 Subject



我有使用主题创建可观察量的代码。我能够使用 subject.onNext(value) 将值传递给可观察流。问题是,如果我在传入值后订阅该可观察量,我仍然希望获得该值。据我所知,受试者并不坚持价值,他们只是像事件一样传递它们。那么我如何将此代码从使用主题更改为使用可观察量。

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。

假设您不需要直接调用 OnNext,那么冷可观察量可能是您想要的:

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

否则,重播主题将允许您保留一个大小的值缓冲区,这些值将在每个观察者订阅时发出。与记住我意识到的所有值不完全相同,但由于内存使用,这无论如何都不是一个好主意。可能更接近 BehaviorSubject 提供的单个值。

以下内容将允许新订阅者使用 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

相关内容

  • 没有找到相关文章

最新更新