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); }