public void AnalyseSolutions(IEnumerable <string> solutions) { Parallel.ForEach(solutions, new ParallelOptions { MaxDegreeOfParallelism = 4 }, solutionFile => { try { var sln = new SolutionFile(solutionFile); progressMonitor.AnalysingSolution(solutionFile); AnalyseProjectFiles(sln.Projects.Select(p => new FileInfo(p)).Where(p => p.Exists)); } catch (Microsoft.Build.Exceptions.InvalidProjectFileException ex) { progressMonitor.FailedProjectFile(solutionFile, ex.BaseMessage); } }); }