public static Task <Chapter> GetChapterAsync(string id, bool forceRefresh = false)
        {
            if (!forceRefresh && ChapterCache.ContainsKey(id) && !ChapterCache[id].IsFaulted)
            {
                return(ChapterCache[id]);
            }
            if (ChapterCache.Count > MaxCachedUnit)
            {
                var outdates = from item in ChapterCache where item.Value.IsCompleted select item.Key;
                foreach (var key in outdates)
                {
                    ChapterCache.Remove(key);
                    if (ChapterCache.Count < MaxCachedUnit)
                    {
                        break;
                    }
                }
            }

            var task = DataCache.GetAsync("chapter-" + id, () => LightKindomHtmlClient.GetChapterAlterAsync(id), null, forceRefresh);

            ChapterCache[id] = task;
            return(task);
        }