diff --git a/src/vs/workbench/services/progress/browser/progressService.ts b/src/vs/workbench/services/progress/browser/progressService.ts index bf6e3489d6d64378812f74dc70ba720c9f49bbdd..f278eb996f27c90b4660b74784f31cc345bf5606 100644 --- a/src/vs/workbench/services/progress/browser/progressService.ts +++ b/src/vs/workbench/services/progress/browser/progressService.ts @@ -380,11 +380,25 @@ export class ProgressService extends Disposable implements IProgressService { const listener = progressStateModel.onDidReport(step => updateNotification(step)); Event.once(progressStateModel.onDispose)(() => listener.dispose()); - // Show progress for at least 800ms and then hide once done or canceled - Promise.all([timeout(800), progressStateModel.promise]).finally(() => { - clearTimeout(notificationTimeout); - notificationHandle?.close(); - }); + // Clean up eventually + (async () => { + try { + + // with a delay we only wait for the finish of the promise + if (typeof options.delay === 'number' && options.delay > 0) { + await progressStateModel.promise; + } + + // without a delay we show the notification for at least 800ms + // to reduce the chance of the notification flashing up and hiding + else { + await Promise.all([timeout(800), progressStateModel.promise]); + } + } finally { + clearTimeout(notificationTimeout); + notificationHandle?.close(); + } + })(); return progressStateModel.promise; }