Exemple #1
0
        public string[] GetAvailableProjects()
        {
            Debug.Assert(_solutionManager != null);

            return(NuGetUIThreadHelper.JoinableTaskFactory.Run(async delegate
            {
                var displayNames = new List <string>();
                var displayNameTasks = new List <Task <string> >();

                // start a single task to get all project's safe name
                var safeNamesTask = Task.Run(async() => await _solutionManager.GetAllNuGetProjectSafeNameAsync());

                var allProjects = await _solutionManager.GetNuGetProjectsAsync();

                foreach (var project in allProjects)
                {
                    // Throttle and wait for a task to finish if we have hit the limit
                    if (displayNameTasks.Count == MaxTasks)
                    {
                        var displayName = await CompleteTaskAsync(displayNameTasks);
                        displayNames.Add(displayName);
                    }

                    var displayNameTask = Task.Run(async() => await GetDisplayNameAsync(project));
                    displayNameTasks.Add(displayNameTask);
                }

                // wait until all the tasks to retrieve display names are completed
                while (displayNameTasks.Count > 0)
                {
                    var displayName = await CompleteTaskAsync(displayNameTasks);
                    displayNames.Add(displayName);
                }

                _projectSafeNames = (await safeNamesTask).ToArray();
                Array.Sort(displayNames.ToArray(), _projectSafeNames, StringComparer.CurrentCultureIgnoreCase);
                return _projectSafeNames;
            }));
        }