示例#1
0
        public async Task <IEnumerable <Story> > GetTopTwentyBestStories()
        {
            var cachedStories = cache.Get <IEnumerable <Story> >(Top20StoriesCacheKey);

            if (cachedStories != null)
            {
                return(cachedStories);
            }

            var tasks = new List <Task <HackerNewsItem> >();

            var top = await httpClient.GetTopNBestStoriesIdsAsync(settings.TopStoriesCount);

            top.ToList().ForEach(s => tasks.Add(httpClient.GetItemAsync(s)));

            var stories = (await Task.WhenAll(tasks)).Select(u => new Story()
            {
                commentCount = u.descendants,
                postedBy     = u.by,
                score        = u.score,
                time         = u.time.ToDateTimeOffset(),
                title        = u.title,
                uri          = u.url
            });

            cache.Set <IEnumerable <Story> >(Top20StoriesCacheKey, stories, TimeSpan.FromSeconds(settings.AbsoluteCacheTimeoutInSecond));

            return(stories);
        }