Skip to content

Commit 8ba686c

Browse files
committed
Allow background tasks in dependsOn
Part of microsoft#70283
1 parent a7b1e06 commit 8ba686c

1 file changed

Lines changed: 19 additions & 1 deletion

File tree

src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ export class TerminalTaskSystem implements ITaskSystem {
446446
let promise = this.activeTasks[key] ? this.activeTasks[key].promise : undefined;
447447
if (!promise) {
448448
this._onDidStateChange.fire(TaskEvent.create(TaskEventKind.DependsOnStarted, task));
449-
promise = this.executeTask(dependencyTask, resolver, trigger, alreadyResolved);
449+
promise = this.executeDependencyTask(dependencyTask, resolver, trigger, alreadyResolved);
450450
}
451451
promises.push(promise);
452452
if (task.configurationProperties.dependsOrder === DependsOrder.sequence) {
@@ -496,6 +496,24 @@ export class TerminalTaskSystem implements ITaskSystem {
496496
}
497497
}
498498

499+
private async executeDependencyTask(task: Task, resolver: ITaskResolver, trigger: string, alreadyResolved?: Map<string, string>): Promise<ITaskSummary> {
500+
// If the task is a background task with a watching problem matcher, we don't wait for the whole task to finish,
501+
// just for the problem matcher to go inactive.
502+
if (!task.configurationProperties.isBackground) {
503+
return this.executeTask(task, resolver, trigger, alreadyResolved);
504+
}
505+
506+
const inactivePromise = new Promise<ITaskSummary>(resolve => {
507+
const taskInactiveDisposable = this._onDidStateChange.event(taskEvent => {
508+
if ((taskEvent.kind === TaskEventKind.Inactive) && (taskEvent.__task === task)) {
509+
taskInactiveDisposable.dispose();
510+
resolve({ exitCode: 0 });
511+
}
512+
});
513+
});
514+
return Promise.race([inactivePromise, this.executeTask(task, resolver, trigger, alreadyResolved)]);
515+
}
516+
499517
private async resolveAndFindExecutable(systemInfo: TaskSystemInfo | undefined, workspaceFolder: IWorkspaceFolder | undefined, task: CustomTask | ContributedTask, cwd: string | undefined, envPath: string | undefined): Promise<string> {
500518
const command = this.configurationResolverService.resolve(workspaceFolder, CommandString.value(task.command.name!));
501519
cwd = cwd ? this.configurationResolverService.resolve(workspaceFolder, cwd) : undefined;

0 commit comments

Comments
 (0)