diff --git a/src/vs/base/browser/defaultWorkerFactory.ts b/src/vs/base/browser/defaultWorkerFactory.ts index 9cab36041966c..4f42810f0bd25 100644 --- a/src/vs/base/browser/defaultWorkerFactory.ts +++ b/src/vs/base/browser/defaultWorkerFactory.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; +import { onUnexpectedError } from 'vs/base/common/errors'; import { COI } from 'vs/base/common/network'; import { IWorker, IWorkerCallback, IWorkerFactory, logOnceWebWorkerWarning } from 'vs/base/common/worker/simpleWorker'; @@ -85,11 +86,13 @@ function isPromiseLike(obj: any): obj is PromiseLike { */ class WebWorker implements IWorker { - private id: number; + private readonly id: number; + private readonly label: string; private worker: Promise | null; constructor(moduleId: string, id: number, label: string, onMessageCallback: IWorkerCallback, onErrorCallback: (err: any) => void) { this.id = id; + this.label = label; const workerOrPromise = getWorker(label); if (isPromiseLike(workerOrPromise)) { this.worker = workerOrPromise; @@ -113,7 +116,14 @@ class WebWorker implements IWorker { } public postMessage(message: any, transfer: Transferable[]): void { - this.worker?.then(w => w.postMessage(message, transfer)); + this.worker?.then(w => { + try { + w.postMessage(message, transfer); + } catch (err) { + onUnexpectedError(err); + onUnexpectedError(new Error(`FAILED to post message to '${this.label}'-worker`, { cause: err })); + } + }); } public dispose(): void {