首页 > 解决方案 > 为什么 Observable.Merge() 在源 observable 上调用 Select()?

问题描述

目前正在试验 Observable.Interval 并发现我自己无法解释的行为。

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

我在测试这个东西时所经历的是,CalculateRateValue()一旦我使用它就会被调用两次Observable.Merge。直到今天,我的理解是,只要有一个新的值 on_rate CalculateThicknessValue就会被这个新的速率值调用。但不应该Select再次从源 observable 调用该部分。

使用Zip或某种Combine.

测试代码如下:

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

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

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


CalculateRateValue并且CalculateThicknessValue是返回的简单方法double。两个 observables 也是类型double

标签: c#observablesystem.reactive

解决方案


通过添加.Publish().RefCount()到 observables 来解决。


推荐阅读