c# - 为什么 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
。
解决方案
通过添加.Publish().RefCount()
到 observables 来解决。
推荐阅读
- aws-lambda - 如何消除 TypeError: Cannot read property 'startsWith' of undefined error during sls deployment
- sql - 查询求和和计数
- javascript - 显示日期条目的剩余天数?
- java - Java方法重载是静态绑定吗?
- azure - Azure 管道 - 错误:gpu_process_transport_factory.cc(1029) 丢失 UI 共享上下文
- css - 使 sass 适应常规 css
- cadence-workflow - 如何重新启动超时/失败/取消/终止的节奏工作流程
- python - Django - 通过基于类的视图的 get_queryset 函数将字典传递给模板
- python - “请先运行 connect()” - 第二次尝试
- php - 如何使用php检查会话是否设置