diff --git a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts index a252d8e4814..81cb217e4b6 100644 --- a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts +++ b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts @@ -231,6 +231,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer public onDidChangeTaskSystemInfo: Event = this._onDidChangeTaskSystemInfo.event; private _onDidReconnectToTasks: Emitter = new Emitter(); public onDidReconnectToTasks: Event = this._onDidReconnectToTasks.event; + public get isReconnected(): boolean { return this._tasksReconnected; } constructor( @IConfigurationService private readonly _configurationService: IConfigurationService, @@ -349,6 +350,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer this._attemptTaskReconnection(); } else { this._tasksReconnected = true; + this._onDidReconnectToTasks.fire(); } }); } diff --git a/src/vs/workbench/contrib/tasks/browser/runAutomaticTasks.ts b/src/vs/workbench/contrib/tasks/browser/runAutomaticTasks.ts index 55ec14e22a0..a4b4239b43c 100644 --- a/src/vs/workbench/contrib/tasks/browser/runAutomaticTasks.ts +++ b/src/vs/workbench/contrib/tasks/browser/runAutomaticTasks.ts @@ -28,19 +28,18 @@ export class RunAutomaticTasks extends Disposable implements IWorkbenchContribut @IWorkspaceTrustManagementService private readonly _workspaceTrustManagementService: IWorkspaceTrustManagementService, @ILogService private readonly _logService: ILogService) { super(); - this._taskService.onDidReconnectToTasks((() => { - if (this._workspaceTrustManagementService.isWorkspaceTrusted()) { - this._tryRunTasks(); - } - })); - this._register(this._workspaceTrustManagementService.onDidChangeTrust(async trusted => { - if (trusted) { - await this._tryRunTasks(); - } - })); + if (this._taskService.isReconnected) { + this._tryRunTasks(); + } else { + this._register(Event.once(this._taskService.onDidReconnectToTasks)(async () => await this._tryRunTasks())); + } + this._register(this._workspaceTrustManagementService.onDidChangeTrust(async () => await this._tryRunTasks())); } private async _tryRunTasks() { + if (!this._workspaceTrustManagementService.isWorkspaceTrusted()) { + return; + } if (this._hasRunTasks || this._configurationService.getValue(ALLOW_AUTOMATIC_TASKS) === 'off') { return; } diff --git a/src/vs/workbench/contrib/tasks/common/taskService.ts b/src/vs/workbench/contrib/tasks/common/taskService.ts index c96cba1125d..5799f23fd49 100644 --- a/src/vs/workbench/contrib/tasks/common/taskService.ts +++ b/src/vs/workbench/contrib/tasks/common/taskService.ts @@ -64,6 +64,7 @@ export interface IWorkspaceFolderTaskResult extends IWorkspaceTaskResult { export interface ITaskService { readonly _serviceBrand: undefined; onDidStateChange: Event; + isReconnected: boolean; onDidReconnectToTasks: Event; supportsMultipleTaskExecutions: boolean;