3

リアクティブエクステンションに関する設計上の質問があります。シナリオは次のとおりです。車のオブジェクトがあり、その車のオブジェクトには複数の検証オブジェクトがあります。各検証オブジェクトは、検証結果を車のクラスに送信し続けます。検証結果は、成功またはエラーになります。検証でエラーが送信されたときに車を停止し、同じ検証で成功が送信されたときに、車を再起動したいと思います。言い換えると:

すべての検証は常に検証結果を車に送信します。すべての検証が成功を送信している場合、私は車を動かし続けたいのですが、そのうちの1つがエラーを送信した場合、その検証から成功を受け取るまで車を停止したいと思います。

私はリアクティブエクステンションでこれに対する解決策を見つけようとしています。

何か案は?

ありがとう

4

1 に答える 1

4

結構簡単。IEnumerable<IObservable<bool>>(オブザーバブルの配列またはリストである可能性があります)が呼び出されている場合は、次のxssように実行できます。

IObservable<bool> combined =
    xss
        .CombineLatest()
        .Select(xs => xs.Aggregate((b0, b1) => b0 && b1));

これは、すべてのオブザーバブルの最新の値がである場合にcombinedのみ発生します。truetrue

これは、すべてのソースオブザーバブルが値を生成した場合にのみ値を生成することに注意してください。開始条件が必要な場合、ソースobservableには、StartWith拡張メソッドを使用して提供されるデフォルト値が必要です。

于 2012-10-10T10:22:17.767 に答える