Skip to content

Commit 248d1a6

Browse files
authored
check if a task run is in progress before running it (#165560)
1 parent 3bd1ecd commit 248d1a6

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

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

+9
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,8 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
218218

219219
protected _taskRunningState: IContextKey<boolean>;
220220

221+
private _inProgressTasks: Set<string> = new Set();
222+
221223
protected _outputChannel: IOutputChannel;
222224
protected readonly _onDidStateChange: Emitter<ITaskEvent>;
223225
private _waitForSupportedExecutions: Promise<void>;
@@ -1203,6 +1205,11 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
12031205
if (!task) {
12041206
throw new TaskError(Severity.Info, nls.localize('TaskServer.noTask', 'Task to execute is undefined'), TaskErrors.TaskNotFound);
12051207
}
1208+
if (this._inProgressTasks.has(task._label)) {
1209+
this._logService.info('Prevented duplicate task from running', task._label);
1210+
return;
1211+
}
1212+
this._inProgressTasks.add(task._label);
12061213
const resolver = this._createResolver();
12071214
let executeTaskResult: ITaskSummary | undefined;
12081215
try {
@@ -1218,6 +1225,8 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
12181225
} catch (error) {
12191226
this._handleError(error);
12201227
return Promise.reject(error);
1228+
} finally {
1229+
this._inProgressTasks.delete(task._label);
12211230
}
12221231
}
12231232

0 commit comments

Comments
 (0)