From 11c8300bb913cfaf2a7f8d7041264cf284d7f875 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Wed, 26 Sep 2018 17:44:59 -0700 Subject: [PATCH] Ensure search cancel takes effect immediately, and still works when search failed --- .../services/search/node/searchService.ts | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/services/search/node/searchService.ts b/src/vs/workbench/services/search/node/searchService.ts index 77500458fb3..8d4d80f705f 100644 --- a/src/vs/workbench/services/search/node/searchService.ts +++ b/src/vs/workbench/services/search/node/searchService.ts @@ -129,7 +129,14 @@ export class SearchService extends Disposable implements ISearchService { const providerPromise = TPromise.join(providerActivations) .then(() => this.extensionService.whenInstalledExtensionsRegistered()) - .then(() => this.searchWithProviders(query, onProviderProgress, token)) + .then(() => { + // Cancel faster if search was canceled while waiting for extensions + if (token && token.isCancellationRequested) { + return TPromise.wrapError(canceled()); + } + + return this.searchWithProviders(query, onProviderProgress, token); + }) .then(completes => { completes = completes.filter(c => !!c); if (!completes.length) { @@ -150,7 +157,7 @@ export class SearchService extends Disposable implements ISearchService { return TPromise.wrapError(errs[0]); }); - return providerPromise.then(value => { + const searchP = providerPromise.then(value => { const values = [value]; const result: ISearchComplete = { @@ -179,6 +186,15 @@ export class SearchService extends Disposable implements ISearchService { return result; }); + return new TPromise((resolve, reject) => { + if (token) { + token.onCancellationRequested(() => { + reject(canceled()); + }); + } + + searchP.then(resolve, reject); + }); } private getSchemesInQuery(query: ISearchQuery): Set { -- GitLab