如何使用响应式扩展来解决这个问题?

时间:2012-10-10 10:10:53

标签: c# system.reactive

我有一个围绕被动扩展的设计问题,这是场景: 我有一个汽车对象,该汽车对象有多个验证对象。每个验证对象都会将验证结果发送到汽车类。验证结果可以是成功或错误。当验证发送错误时我想停止汽车,当相同的验证发送成功时,我想再次启动汽车。 换句话说:

所有验证都会不断向汽车发送验证结果。如果所有验证都发送成功,我希望汽车继续运行,但如果其中一个发送错误,我想停车,直到我从验证中获得成功。

我正试图通过反应式扩展找到解决方案。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:4)

非常简单。如果您有一个名为IEnumerable<IObservable<bool>>的{​​{1}}(可能是一个可观察的数组或列表),那么您可以这样做:

xss

当所有可观察量的最新值为IObservable<bool> combined = xss .CombineLatest() .Select(xs => xs.Aggregate((b0, b1) => b0 && b1)); 时,combined只会true

请注意,这只会在所有源可观察量都产生值时生成一个值。如果您需要一个起始条件,则源可观察量应具有使用true扩展方法提供的默认值。