private ZbTask<IEnumerable<EventViewModel>> MakeFetchTask(DateTime from, DateTime to)
{
var result = new List<ZbTask<List<EventViewModel>>>();
for (var curDay = from.Date; curDay <= to; curDay = curDay.AddDays(1))
{
FetchCacheEntry entry;
if (_cache.TryGetValue(curDay, out entry))
{
if (entry.FetchTime.AddMinutes(5) > DateTime.Now)
{
result.Add(entry.EventsTask);
}
else
{
_cache.Remove(curDay);
entry = FetchCacheEntry.None;
}
}
if (entry == FetchCacheEntry.None)
{
entry = new FetchCacheEntry(QueryContextAsync(curDay, curDay.AddDays(1)));
_cache.Add(curDay, entry);
result.Add(entry.EventsTask);
}
}
return new ZbTask<IEnumerable<EventViewModel>>(result)
.OnResult(t =>
{
t.Result = result.Distinct().SelectMany(r => r.Result).Distinct();
});
}