/// <summary> /// Aggregates the projects. /// </summary> public async Task AggregateProjectsAsync() { var projectPaths = _projectSearchProvider.GetProjectPaths(); var deserializationTasks = projectPaths .AsParallel() .Select(path => _projectBuilder.DeserializeFromXmlAsync(path)); var projects = await Task.WhenAll(deserializationTasks); var aggregationInfo = new AggregationInfo { ProjectDictionary = projects.ToDictionary(project => project.ProjectName, StringComparer.OrdinalIgnoreCase), BuildSet = new HashSet <Project>(projects.Length), OrderedList = new LinkedList <Project>() }; foreach (var project in projects.OrderBy(p => p.ProjectName)) { AddProjectToAggregationInfo(aggregationInfo, project); } _outputChannel.DisplayOutput(aggregationInfo.OrderedList , (IReadOnlyDictionary <string, Project>)aggregationInfo.ProjectDictionary); }