0

私は、州ごとの牛乳価格の変動を追跡するアプリケーションを持っています。ユーザーは、地元の食料品店で牛乳の価格を見たときに、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」または「バッファリング」するように指示するにはどうすればよいですか? メッセージを見逃すことはありません。

よくわからない場合は、お気軽にお知らせください

ありがとう。

4

2 に答える 2

2

それは奇妙に聞こえるのではなく、リアクティブ プログラミングの理解が不足しているように思えます。;-)

を使ってみてくださいGroupBy

于 2013-09-13T09:02:20.810 に答える
0

踊りたい気分です。世界一素敵な男リー・キャンベルに感謝

私の問題を解決するために次のコードを書きました。

mainObservable
            .GroupBy(k => k.State)
            .Select(g => new MilkPriceTracker(g.Key, g))
            .ObserveOnDispatcher(DispatcherPriority.DataBind)
            .Subscribe(_statesTrackers.Add);
于 2013-09-13T18:05:03.940 に答える