public async Task <IEnumerable <Article> > GetTrendingAsync() { const string cacheKey = "TrendingArticles"; var cachedArticles = _cache.Get <HashSet <Article> >(cacheKey); if (cachedArticles != null) { return(cachedArticles); } var trendingPages = await _googleAnalyticsClient.GetTrendingPagesAsync(byte.MaxValue).ConfigureAwait(false); var articles = await _articleRepository.GetOrderedByDateAsync().ConfigureAwait(false); var articleList = articles.ToList(); var top10TrendingArticles = new HashSet <Article>(); foreach (var page in trendingPages) { var article = articleList.FirstOrDefault(a => page.Path.ToLower().Contains(a.Id.ToLower())); if (article == null) { continue; } top10TrendingArticles.Add(article); if (top10TrendingArticles.Count == 10) { break; } } _cache.Set(cacheKey, top10TrendingArticles, new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddHours(24) }); return(top10TrendingArticles); }
public async Task <IEnumerable <PageResult> > GetTrendingPagesAsync(byte maxCount) { const string cacheKey = "GoogleAnalyticsTrendingPages"; var cachedResult = _cache.Get <IEnumerable <PageResult> >(cacheKey); if (cachedResult != null) { return(cachedResult); } // Don't need to worry about concurrent writes to the cache var result = await _googleAnalyticsClient.GetTrendingPagesAsync(maxCount).ConfigureAwait(false); if (result != null) { _cache.Set(cacheKey, result, new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddHours(24) }); } return(result); }