为什么observable . merge()在源observable上调用Select() ? &g



目前正在测试Observable。我发现了一个我无法解释的行为

_rate = Observable.Interval(TimeSpan.FromMilliseconds(250), scheduler).Select(_ => CalculateRateValue());
_thickness = Observable.Merge(_rate).Select(CalculateThicknessValue);

我在测试这个东西时的经验是,只要我使用Observable.Merge,CalculateRateValue()就会被调用两次。直到今天,我的理解是,只要_rate上有一个新的值,CalculateThicknessValue就会被调用这个新的速率值。但是不应该再从源可观察对象中调用Select部分。

在使用Zip或某种Combine时也会发生相同的情况。

测试代码如下:

TestScheduler scheduler = new TestScheduler();
long ticks = TimeSpan.FromMilliseconds(250).Ticks;
scheduler.AdvanceBy(ticks);
...

每次调用AdvanceBy都会触发两次CalculateRateValue

为什么会有这种行为,我能做些什么来阻止它呢?


CalculateRateValueCalculateThicknessValue是返回double的简单方法。这两个可观测值也是double类型。

通过将.Publish().RefCount()添加到可观测对象中来解决。

最新更新