我有一个关于反应式扩展的设计问题,这是场景:我有一个汽车对象,该汽车对象有多个验证对象。每个验证对象不断向汽车类发送验证结果。验证结果可以是"成功"或"错误"。当验证发送错误时,我想停止汽车,当相同的验证发送成功时,我想再次启动汽车。换句话说:
所有验证不断向汽车发送验证结果。如果所有验证都发送成功,我希望汽车继续行驶,但如果其中一个发送错误,我想停止汽车,直到我从该验证中获得成功。
我正在尝试通过反应式扩展找到解决此问题的方法。
有什么想法吗?
谢谢
很简单。如果您有一个名为 xss
的IEnumerable<IObservable<bool>>
(可能是数组或可观察量列表),则可以执行以下操作:
IObservable<bool> combined =
xss
.CombineLatest()
.Select(xs => xs.Aggregate((b0, b1) => b0 && b1));
现在,只有当所有可观察量的最新值true
时,combined
才会true
。
请注意,仅当所有源可观察量都生成了一个值时,这才会生成一个值。如果需要起始条件,源可观察量应具有使用 StartWith
扩展方法提供的默认值。