我有一个关于反应式扩展的设计问题,这是场景:我有一个汽车对象,而该汽车对象有多个验证对象。每个验证对象不断向汽车类发送验证结果。验证结果可以是成功或错误。当验证发送错误时,我想停止汽车,当相同的验证发送成功时,我想再次启动汽车。换句话说:
所有验证不断向汽车发送验证结果。如果所有验证都发送成功,我希望汽车继续行驶,但如果其中一个发送错误,我想停止汽车,直到我从该验证中收到成功。
我正在尝试通过响应式扩展找到解决方案。
有任何想法吗?
谢谢
我有一个关于反应式扩展的设计问题,这是场景:我有一个汽车对象,而该汽车对象有多个验证对象。每个验证对象不断向汽车类发送验证结果。验证结果可以是成功或错误。当验证发送错误时,我想停止汽车,当相同的验证发送成功时,我想再次启动汽车。换句话说:
所有验证不断向汽车发送验证结果。如果所有验证都发送成功,我希望汽车继续行驶,但如果其中一个发送错误,我想停止汽车,直到我从该验证中收到成功。
我正在尝试通过响应式扩展找到解决方案。
有任何想法吗?
谢谢
很容易。如果你有一个IEnumerable<IObservable<bool>>
(可能是一个数组或 observables 列表)被调用xss
,那么你可以这样做:
IObservable<bool> combined =
xss
.CombineLatest()
.Select(xs => xs.Aggregate((b0, b1) => b0 && b1));
现在combined
只有true
当所有 observables 的最新值为true
.
请注意,这只会在所有源 observable 都产生值时产生值。如果你需要一个起始条件,源 observables 应该有一个使用StartWith
扩展方法提供的默认值。