目前正在测试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
。
为什么会有这种行为,我能做些什么来阻止它呢?
CalculateRateValue
和CalculateThicknessValue
是返回double
的简单方法。这两个可观测值也是double
类型。
通过将.Publish().RefCount()
添加到可观测对象中来解决。