src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts/AbstractTaskService/runSingleBuildTask
class AbstractTaskService:	private runBuildCommand(): void {
		if (!this.canRunCommand()) {
			return;
		}
		if (this.schemaVersion === JsonSchemaVersion.V0_1_0) {
			this.build();
			return;
		}
		let options: IProgressOptions = {
			location: ProgressLocation.Window,
			title: nls.localize('TaskService.fetchingBuildTasks', 'Fetching build tasks...')
		};
		let promise = (async () => {
			const buildTasks = await this._findWorkspaceTasksInGroup(TaskGroup.Build, false);

			async function runSingleBuildTask(task: Task | undefined, problemMatcherOptions: ProblemMatcherRunOptions | undefined, that: AbstractTaskService) {
				that.run(task, problemMatcherOptions, TaskRunSource.User).then(undefined, reason => {
					// eat the error, it has already been surfaced to the user and we don't care about it here
				});
			}

			if (buildTasks.length === 1) {
				const buildTask = buildTasks[0];
				if (ConfiguringTask.is(buildTask)) {
					return this.tryResolveTask(buildTask).then(resolvedTask => {
						runSingleBuildTask(resolvedTask, undefined, this);
					});
				} else {
					runSingleBuildTask(buildTask, undefined, this);
					return;
				}
			}

			return this.getTasksForGroup(TaskGroup.Build).then((tasks) => {
				if (tasks.length > 0) {
					let { none, defaults } = this.splitPerGroupType(tasks);
					if (defaults.length === 1) {
						runSingleBuildTask(defaults[0], undefined, this);
						return;
					} else if (defaults.length + none.length > 0) {
						tasks = defaults.concat(none);
					}
				}
				this.showIgnoredFoldersMessage().then(() => {
					this.showQuickPick(tasks,
						nls.localize('TaskService.pickBuildTask', 'Select the build task to run'),
						{
							label: nls.localize('TaskService.noBuildTask', 'No build task to run found. Configure Build Task...'),
							task: null
						},
						true).then((entry) => {
							let task: Task | undefined | null = entry ? entry.task : undefined;
							if (task === undefined) {
								return;
							}
							if (task === null) {
								this.runConfigureDefaultBuildTask();
								return;
							}
							runSingleBuildTask(task, { attachProblemMatcher: true }, this);
						});
				});
			});
		})();
		this.progressService.withProgress(options, () => promise);
	}