diff --git a/src/extension/executors/runner/index.ts b/src/extension/executors/runner/index.ts index 8f75bd29b..d33883ef2 100644 --- a/src/extension/executors/runner/index.ts +++ b/src/extension/executors/runner/index.ts @@ -575,7 +575,7 @@ export const resolveProgramOptionsDagger: IResolveRunProgram = async ({ throw new Error('Cannot resolve notebook without cache entry') } - const cachedNotebook = kernel.getParserCache(cacheId) + const cachedNotebook = await kernel.getParserCache(cacheId, exec.cell) const notebookResolver = await runner.createNotebook(cachedNotebook) const daggerShellScript = await notebookResolver.resolveDaggerNotebook(exec.cell.index) diff --git a/src/extension/kernel.ts b/src/extension/kernel.ts index 23d06daa1..6bb701884 100644 --- a/src/extension/kernel.ts +++ b/src/extension/kernel.ts @@ -1284,8 +1284,21 @@ export class Kernel implements Disposable { return this.serializer?.getNotebookDataCache(cacheId) } - public getParserCache(cacheId: string): Serializer.Notebook | undefined { - return this.serializer?.getParserCache(cacheId) + public async getParserCache( + cacheId: string, + cell: NotebookCell, + ): Promise { + // ensure the serializer is caught up + for (let i = 0; i < 20; i++) { + const cellText = cell.document.getText() + const notebook = this.serializer?.getParserCache(cacheId) + if (notebook && notebook.cells[cell.index].value === cellText) { + return notebook + } + await new Promise((resolve) => setTimeout(resolve, 100)) + } + + return undefined } public async getReporterPayload(