diff --git a/src/sql/base/browser/ui/table/asyncDataView.ts b/src/sql/base/browser/ui/table/asyncDataView.ts index 8681a5b637..de4833ee93 100644 --- a/src/sql/base/browser/ui/table/asyncDataView.ts +++ b/src/sql/base/browser/ui/table/asyncDataView.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { IDisposableDataProvider } from 'sql/base/browser/ui/table/interfaces'; +import { CancellationTokenSource } from 'vs/base/common/cancellation'; export interface IObservableCollection { getLength(): number; @@ -14,16 +15,12 @@ export interface IObservableCollection { dispose(): void; } -class LoadCancellationToken { - isCancelled: boolean; -} - class DataWindow { private _data: T[]; private _length: number = 0; private _offsetFromDataSource: number = -1; - private lastLoadCancellationToken: LoadCancellationToken; + private cancellationToken = new CancellationTokenSource(); constructor( private loadFunction: (offset: number, count: number) => Thenable, @@ -36,9 +33,7 @@ class DataWindow { this.loadFunction = undefined; this.placeholderItemGenerator = undefined; this.loadCompleteCallback = undefined; - if (this.lastLoadCancellationToken) { - this.lastLoadCancellationToken.isCancelled = true; - } + this.cancellationToken.cancel(); } public getStartIndex(): number { @@ -65,17 +60,16 @@ class DataWindow { this._length = length; this._data = undefined; - if (this.lastLoadCancellationToken) { - this.lastLoadCancellationToken.isCancelled = true; - } + this.cancellationToken.cancel(); + this.cancellationToken = new CancellationTokenSource(); + const currentCancellation = this.cancellationToken; if (length === 0) { return; } - this.lastLoadCancellationToken = new LoadCancellationToken(); this.loadFunction(offset, length).then(data => { - if (!this.lastLoadCancellationToken.isCancelled) { + if (!currentCancellation.token.isCancellationRequested) { this._data = data; this.loadCompleteCallback(this._offsetFromDataSource, this._offsetFromDataSource + this._length); }