Имам приложение, което следи колебанията в цената на млякото по щати, потребителите, когато видят цената на млякото в местния магазин за хранителни стоки, могат да отидат на уебсайт и да изпратят тази цена (подобно на 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. OnNext се обработва и се изгражда нов Tracker.
Как да „поставя на пауза“ mainObservable и да му кажа на „DVR“ или „Буфер“, докато възобновя? така че не пропускам никакви съобщения.
Ако не съм достатъчно ясен, не се колебайте да ми кажете
Благодаря.