Skip to content

Commit e85dccf

Browse files
committed
await for kernel resolve before executing and handle token cancelation for kernel picker
1 parent 0670596 commit e85dccf

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,21 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
152152
return;
153153
}
154154

155+
if (this._activeKernel === kernel) {
156+
return;
157+
}
158+
155159
this._activeKernel = kernel;
160+
this._activeKernelResolvePromise = undefined;
156161

157162
const memento = this._activeKernelMemento.getMemento(StorageScope.GLOBAL);
158163
memento[this.viewModel!.viewType] = this._activeKernel?.id;
159164
this._activeKernelMemento.saveMemento();
160165
this._onDidChangeKernel.fire();
161166
}
162167

168+
private _activeKernelResolvePromise: Promise<void> | undefined = undefined;
169+
163170
private _currentKernelTokenSource: CancellationTokenSource | undefined = undefined;
164171
private _multipleKernelsAvailable: boolean = false;
165172

@@ -637,7 +644,17 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
637644

638645
if (this.activeKernel) {
639646
await this._loadKernelPreloads(this.activeKernel.extensionLocation, this.activeKernel);
640-
await this.activeKernel.resolve(this.viewModel!.uri, this.getId(), tokenSource.token);
647+
648+
if (tokenSource.token.isCancellationRequested) {
649+
return;
650+
}
651+
652+
this._activeKernelResolvePromise = this.activeKernel.resolve(this.viewModel!.uri, this.getId(), tokenSource.token);
653+
await this._activeKernelResolvePromise;
654+
655+
if (tokenSource.token.isCancellationRequested) {
656+
return;
657+
}
641658
}
642659

643660
memento[provider.id] = this._activeKernel?.id;
@@ -657,8 +674,17 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
657674
|| kernelsFromSameExtension[0];
658675
this.activeKernel = preferedKernel;
659676
await this._loadKernelPreloads(this.activeKernel.extensionLocation, this.activeKernel);
677+
678+
if (tokenSource.token.isCancellationRequested) {
679+
return;
680+
}
681+
660682
await preferedKernel.resolve(this.viewModel!.uri, this.getId(), tokenSource.token);
661683

684+
if (tokenSource.token.isCancellationRequested) {
685+
return;
686+
}
687+
662688
memento[provider.id] = this._activeKernel?.id;
663689
this._activeKernelMemento.saveMemento();
664690
tokenSource.dispose();
@@ -669,7 +695,14 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
669695
this.activeKernel = kernels[0];
670696
if (this.activeKernel) {
671697
await this._loadKernelPreloads(this.activeKernel.extensionLocation, this.activeKernel);
698+
if (tokenSource.token.isCancellationRequested) {
699+
return;
700+
}
701+
672702
await this.activeKernel.resolve(this.viewModel!.uri, this.getId(), tokenSource.token);
703+
if (tokenSource.token.isCancellationRequested) {
704+
return;
705+
}
673706
}
674707

675708
tokenSource.dispose();
@@ -1296,6 +1329,10 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
12961329
if (this._activeKernel) {
12971330
// TODO@rebornix temp any cast, should be removed once we remove legacy kernel support
12981331
if ((this._activeKernel as INotebookKernelInfo2).executeNotebookCell) {
1332+
if (this._activeKernelResolvePromise) {
1333+
await this._activeKernelResolvePromise;
1334+
}
1335+
12991336
await (this._activeKernel as INotebookKernelInfo2).executeNotebookCell!(this._notebookViewModel!.uri, undefined);
13001337
} else {
13011338
await this.notebookService.executeNotebook2(this._notebookViewModel!.viewType, this._notebookViewModel!.uri, this._activeKernel.id);

0 commit comments

Comments
 (0)