private async Task LoadProjectsAsync() { ClearLoadedProjects(); var errors = new Dictionary <string, Exception>(); var tuple = await RunTaskAsync(async() => { var projectsTask = VsProject.LoadAllFromDirectoryAsync(RootDirectory, IncludedProjectPathFilter, ExcludedProjectPathFilter, IgnoreExceptions, _projectCollection, errors); var solutionsTask = VsSolution.LoadAllFromDirectoryAsync(RootDirectory, IncludedProjectPathFilter, ExcludedProjectPathFilter, IgnoreExceptions, _projectCollection, errors); await Task.WhenAll(projectsTask, solutionsTask); await Task.Run(() => { var projectCache = projectsTask.Result.ToDictionary(p => p.Path, p => p); foreach (var solution in solutionsTask.Result) { solution.LoadProjects(IgnoreExceptions, projectCache, errors); } }); return(new Tuple <List <VsProject>, List <VsSolution> >(projectsTask.Result, solutionsTask.Result)); }); if (tuple != null) { var projects = tuple.Item1; var solutions = tuple.Item2; AllSolutions.Initialize(solutions.OrderBy(p => p.Name)); AllProjects.Initialize(projects.OrderBy(p => p.Name)); SelectedProject = FilteredProjects.FirstOrDefault(); foreach (var error in errors) { AddLog(error.Key + "\n" + error.Value.Message); } InitializeFilter(); IsLoaded = true; } }