複数の(2〜10)個の観測値があり、それぞれが指定された時間ウィンドウで1つのイベントを発生させます。複数の観測値の順序を同期させる
私は3つの科目を持っていると言うと、彼らは任意の順序を次のように発射することを説明することができます:
Subjects: sA, sB, sC
Order of time window 1:
sB, then sA, then sC
Order of time window 2:
sA, then sC, then sB
Order of time window 3:
sA, then sB, then sC
etc.
をだから私は、私は、ストリームを次のようになるだろうマージを行うならば:SB、SA、SC、SA、私は、時間ウィンドウ内でイベントの順序を強制したいと思っています。マージされたストリームを以下につながる
1. sA
2. sB
3. sC
:SA、SB、SC、SA、SB、SC、SA、SB、SCなど
ウィンドウ時間自体は知られているが、各以来されていませんイベントは各ウィンドウで一度だけ発生します。すべてのサブジェクトが起動すると、ウィンドウは閉じられ、新しいウィンドウが開きます。
どのようにすればいいのですか?
拡張質問(重要ではない):観測値は互いに独立しているので、共通の静的メソッドを導入する必要があります。ここで、各観測値の順序を同期できます。
public static IObservable<T> SynchronizeOrder<T>(IObservable<T> source, int order)
{
//return synchronized source
}
更新:私の元の質問には明確ではありませんでした何かが観測は、異なるイベントタイプのものとすることができるということでした(私は私の例では、特定のイベントデータタイプを使用していない理由です)、その結果、私は順序付けられた観測値をマージしたくありません。私は、独立したオブザーバブルがその順序で同期していることを保証できる仕組みを作りたいと思っています。
myEventStream
.ObserveOn(TaskFactory)
.DoSomeExpensiveComputation()
.Order(2) //doesn't have to be an extension method
.Subscibe(computationResult=>
sharedRessourceWhereOrderMatters.Update(computationResult))
? 'sA'は各ウィンドウを閉じますが、何が開かれているか分からずに、' sB'と 'sC'をどれだけ長く保持するか分かりません。 – yamen
良い点、私の質問は十分にはっきりしていない、それを更新しました。 – lukebuehler