@@ -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