Код выполняется до обработки последнего набора результатов:
var rxQueryTimeOut = pollingPeriodInSeconds + dbQueryTimeoutInSeconds;
var scheduler = new EventLoopScheduler(ts => new Thread(ts) {Name = "DatabasePoller"});
query = Observable.Interval(rxQueryTimeOut, scheduler).ObserveOn(SynchronizationContext.Current)
.Select(_ => dbQuery.LoadItemsFromDB(LastFetchedRecord)).Do((x) => DoSomething(x, itemsMgr))
.Retry() //Loop on errors
.Repeat(); //Loop on success
query.Subscribe();
private void DoSomething(List<ItemDBData> theoDataDbs, IItemsMgr itemsMgr)
{
foreach(var theoData in theoDataDbs)
{
}
}
До завершения выполнения DoSomething
, Observable.Interval
запускается снова.
Я пытался:
private void DoSomething(List<ItemDBData> items, IItemsMgr itemsMgr)
{
if(items.Count> 0)
LastFetchedRecord = items[items.Count-1].TimeStamp;
foreach(var itemData in items)
{
}
}
Но я думаю, что каждый интервал отбрасывает последний запрос, потому что я теряю данные. Как мне это решить?