diff --git a/src/vs/workbench/contrib/tasks/common/problemCollectors.ts b/src/vs/workbench/contrib/tasks/common/problemCollectors.ts index 0087529e25f88a..a1667257f46283 100644 --- a/src/vs/workbench/contrib/tasks/common/problemCollectors.ts +++ b/src/vs/workbench/contrib/tasks/common/problemCollectors.ts @@ -436,7 +436,7 @@ export class WatchingProblemCollector extends AbstractProblemCollector implement let markerChanged: IDisposable | undefined = Event.debounce(this.markerService.onMarkerChanged, (last: readonly URI[] | undefined, e: readonly URI[]) => { return (last ?? []).concat(e); - }, 500)(async (markerEvent) => { + }, 500, false, true)(async (markerEvent) => { markerChanged?.dispose(); markerChanged = undefined; if (!markerEvent.includes(modelEvent.uri) || (this.markerService.read({ resource: modelEvent.uri }).length !== 0)) { @@ -448,8 +448,11 @@ export class WatchingProblemCollector extends AbstractProblemCollector implement } }); setTimeout(async () => { - markerChanged?.dispose(); + // Calling dispose below can trigger the debounce event (via flushOnListenerRemove), so we + // have to unset markerChanged first to make sure the handler above doesn't dispose it again. + const _markerChanged = markerChanged; markerChanged = undefined; + _markerChanged?.dispose(); }, 600); })); }