public async Task Run(CancellationToken cancellationToken) { var directoryInfo = GetDirectory(); var lck = new FileDistributedLock(directoryInfo, "extract-articles"); using (var distributedLock = await lck.TryAcquireAsync()) { if (distributedLock == null) { return; } var datasources = await _datasourceCommandRepository.GetAll(cancellationToken); foreach (var datasource in datasources) { try { await ExtractArticlesFromFeed(datasource, cancellationToken); } catch (Exception ex) { _logger.LogError(ex.ToString()); } } await _datasourceCommandRepository.Update(datasources, cancellationToken); await _datasourceCommandRepository.SaveChanges(cancellationToken); } }
public async Task Run(CancellationToken cancellationToken) { var directoryInfo = ArticleExtractorJob.GetDirectory(); var lck = new FileDistributedLock(directoryInfo, "extract-recommendations"); using (var distributedLock = await lck.TryAcquireAsync()) { if (distributedLock == null) { return; } var popularArticles = await GetPopularArticles(cancellationToken); var result = GetSimilarArticlesByWord2Vec(popularArticles).ToList(); foreach (var articles in result) { var firstArticle = articles.First(); var recommendation = RecommendationAggregate.Create(firstArticle.UserId); foreach (var article in articles) { recommendation.Recommend(article.ArticleId, article.Score); } await _recommendationCommandRepository.Add(recommendation, cancellationToken); await _recommendationCommandRepository.SaveChanges(cancellationToken); } } }
public async Task Consume(ConsumeContext <ArticleAddedEvent> context) { var directoryInfo = ArticleExtractorJob.GetDirectory(); var lck = new FileDistributedLock(directoryInfo, "article-added"); using (var distributedLock = await lck.TryAcquireAsync()) { if (distributedLock == null) { var random = new Random(); Thread.Sleep(random.Next(100, 2000)); return; } var datasource = await _dataSourceCommandRepository.Get(context.Message.DataSourceId, CancellationToken.None); datasource.AddArticle(context.Message.PublishDate); await _dataSourceCommandRepository.Update(new[] { datasource }, CancellationToken.None); await _dataSourceCommandRepository.SaveChanges(CancellationToken.None); } }