src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts/AbstractTaskService/executeTask
class AbstractTaskService:	private async executeTask(task: Task, resolver: ITaskResolver, runSource: TaskRunSource): Promise<ITaskSummary> {
		let taskToRun: Task = task;
		if (await this.saveBeforeRun()) {
			await this.configurationService.reloadConfiguration();
			await this.updateWorkspaceTasks();
			const taskFolder = task.getWorkspaceFolder();
			const taskIdentifier = task.configurationProperties.identifier;
			// Since we save before running tasks, the task may have changed as part of the save.
			// However, if the TaskRunSource is not User, then we shouldn't try to fetch the task again
			// since this can cause a new'd task to get overwritten with a provided task.
			taskToRun = ((taskFolder && taskIdentifier && (runSource === TaskRunSource.User))
				? await this.getTask(taskFolder, taskIdentifier) : task) ?? task;
		}
		await ProblemMatcherRegistry.onReady();
		let executeResult = this.getTaskSystem().run(taskToRun, resolver);
		return this.handleExecuteResult(executeResult, runSource);
	}