public Task <Chapter> GetChapterAsync(string chptId, string volId, string serId, bool forceRefresh = false) { if (!forceRefresh && ChapterCache.ContainsKey(chptId) && !ChapterCache[chptId].IsFaulted) { return(ChapterCache[chptId]); } if (ChapterCache.Count > MaxCachedUnit) { var outdates = (from item in ChapterCache where item.Value.IsCompleted select item.Key).ToArray(); foreach (var key in outdates) { ChapterCache.Remove(key); if (ChapterCache.Count < MaxCachedUnit) { break; } } } var vol = Index.Volumes.FirstOrDefault(v => v.Id == volId); var task = GetAsync <Chapter>( ChaptersFolder, string.Format(ChapterFileName, chptId), () => DmzjDocSecBase.GetChapterAsync(chptId, vol), null, forceRefresh); ChapterCache[chptId] = task; CachedChapterSet.Add(chptId); return(task); }
public async Task <Series> GetIndexAsync(bool forceRefresh = false) { if (_indexUpdateTask != null) { return(await _indexUpdateTask); } if (Index == null || forceRefresh) { _indexUpdateTask = GetAsync(BookFolder, SeriesMetaFileName, () => DmzjDocSecBase.GetSeriesAsync(_seriesId), TimeSpan.FromDays(7), forceRefresh).ContinueWith(ts => { Index = ts.Result; _indexUpdateTask = null; return(ts.Result); }); await _indexUpdateTask; } return(Index); }