コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }