私は、州ごとの牛乳価格の変動を追跡するアプリケーションを持っています。ユーザーは、地元の食料品店で牛乳の価格を見たときに、Web サイトにアクセスしてその価格を送信できます (GasBuddy によく似ています)。
彼らが価格を提出すると、私はそれを Observable<MilkPrice> で受け取ります。これが牛乳価格の実装です
class MilkPrice {
string State {get;set;}
decimal Price {get;set;}
}
価格を受け取ると、状態ごとに MilkPriceTracker オブジェクトのリストを維持します。特定の状態のオブジェクトが存在しない場合は、List オブジェクトに追加します。MilkPriceTracker は、コンストラクターで IObservable を受け取るビュー モデルであり、これは次のとおりです。 Tracker オブジェクトの作成方法
if (!_statesTracker.Any(s => s.State.Equals(receivedInOnNext.State)) {
_statesTracker.Add(new MilkPriceTracker (mainObservable.Where(s.State.Equals(receivedInOnNext.State));
}
デフォルトでは 50 州すべてをリストに追加するわけではありません。なぜなら、価格が報告されている州だけが好きだからです。バージニア州の 1,000 人のユーザーが同時に価格を報告し始めたとしましょう... .
最初の男が報告すると、彼は新しい Tracker オブジェクトを構築し、彼のメッセージは既に消費されているため失われます。Observable.Concat(Observable.Return(alreadyReceivedObj), mainObservable.Wher.....))コンストラクタへ
私はそれを試しましたが、メッセージの頻度が高いため、mainObservable の subscription.OnNext が処理され、新しい Tracker が構築されるまでに、いくつかはまだ見逃されています。
mainObservable を「一時停止」し、再開するまで「DVR」または「バッファリング」するように指示するにはどうすればよいですか? メッセージを見逃すことはありません。
よくわからない場合は、お気軽にお知らせください
ありがとう。