public async Task RunAsync(CancellationToken token) { if (_writerProvider.TryGetWriter(_analysisOptions.Value.Format, out var writer)) { const string resultDefName = "BinaryAnalysis"; var resultDefInformationUri = new Uri("https://docs.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-overview"); var version = GetExtensionVersion(); var output = Path.Combine(Directory.GetCurrentDirectory(), $"AnalysisReport.{_analysisOptions.Value.Format}"); _logger.LogInformation(LocalizedStrings.WritingOutputMessage, output); using var stream = File.Create(output); var allResults = new ConcurrentDictionary <string, ConcurrentBag <AnalyzeResult> >(); await _apiChecker.RunAsync(result => Task.Run(() => { var bagToPopulate = allResults.GetOrAdd(result.FileLocation, new ConcurrentBag <AnalyzeResult>()); bagToPopulate.Add(result); })); await writer.WriteAsync(allResults .Select(g => new AnalyzeResultDefinition { AnalysisResults = g.Value.ToAsyncEnumerable(), Name = $"{resultDefName} | {g.Key}", Version = version, InformationUri = resultDefInformationUri, }).ToAsyncEnumerable(), stream, token); _logger.LogInformation(LocalizedStrings.AnalysisCompleteMessage, output); } else { _logger.LogError(LocalizedStrings.RequestedFormatUnavailableMessage, _analysisOptions.Value.Format); } }
public async Task RunAsync(CancellationToken token) { using var context = await _contextFactory.CreateContext(token); await _stateManager.LoadStateAsync(context, token); var analzyerContext = new AnalyzeContext(context); var analyzeResultMap = new List <AnalyzeResultDefinition>(); await foreach (var provider in _providers.ToAsyncEnumerable().WhereAwait(async i => await i.IsApplicableAsync(analzyerContext, token))) { analyzeResultMap.Add(new() { Version = GetProviderVersion(provider), Name = provider.Name, InformationUri = provider.InformationUri, AnalysisResults = provider.AnalyzeAsync(analzyerContext, token), }); } if (_writerProvider.TryGetWriter(_options.Value.Format, out var writer)) { var output = Path.Combine(Directory.GetCurrentDirectory(), $"AnalysisReport.{_options.Value.Format}"); _logger.LogInformation(LocalizedStrings.WritingOutputMessage, output); using var stream = File.Create(output); await writer.WriteAsync(analyzeResultMap.ToAsyncEnumerable(), stream, token).ConfigureAwait(false); _logger.LogInformation(LocalizedStrings.AnalysisCompleteMessage, output); } else { _logger.LogError(LocalizedStrings.RequestedFormatUnavailableMessage, _options.Value.Format); } }