我在 ReactiveUI 中学习了一些速成课程,并System.Reactive.Linq在发现我需要的 UI 库将它用于所有事情之后。在大多数情况下,这似乎是可以理解的,但是有一个操作没有做任何事情。
我有一个控件,我需要在两个地方使用它的值。我有一个IObservable<T>代表它的价值,我使用如下:
案例1:我需要将一个值与另一个可观察值结合起来,将一个值提供给另一个可观察值。所以我
Observable.CombineLatest(myObservable, otherObservable, (m, o) => ProduceValue(m, o))完全按照预期使用此更新来制作它。由此,我知道这myObservable是正确触发更新。
案例 2:我需要在其他地方使用这个值,在不可观察的上下文中。所以:myObservable.Do(v => UpdateViewModelWith(v))。 这永远不会触发。 我已经通过在 lambda 中放置一个断点并在调试器下运行它来验证这一点。
从案例 1 我知道 observable 正在正确触发。据我了解,可观察对象在概念上很像事件,(有一堆机制让它们感觉更像IEnumerables,)并且像事件完全能够接受多个听众,所以他们中的两个不应该成为问题。(通过更改设置两个侦听器的顺序进行验证,这不会对观察到的行为产生任何影响。)那么是什么导致案例 2 永远不会运行呢?