3

我有一个关于反应式扩展的设计问题,这是场景:我有一个汽车对象,而该汽车对象有多个验证对象。每个验证对象不断向汽车类发送验证结果。验证结果可以是成功或错误。当验证发送错误时,我想停止汽车,当相同的验证发送成功时,我想再次启动汽车。换句话说:

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

我正在尝试通过响应式扩展找到解决方案。

有任何想法吗?

谢谢

4

1 回答 1

4

很容易。如果你有一个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扩展方法提供的默认值。

于 2012-10-10T10:22:17.767 回答