+ const worker = workerSetElement.worker;
+ const waitWorkerExit = new Promise<void>((resolve) => {
+ worker.on('exit', () => {
+ resolve();
+ });
+ });
+ await worker.terminate();
+ await waitWorkerExit;
+ }
+ }
+
+ /** @inheritDoc */
+ public async addElement(elementData: WorkerData): Promise<void> {
+ if (!this.workerSet) {
+ throw new Error("Cannot add a WorkerSet element: workers' set does not exist");
+ }
+ const workerSetElement = await this.getWorkerSetElement();
+ workerSetElement.worker.postMessage({
+ event: WorkerMessageEvents.startWorkerElement,
+ data: elementData,
+ });
+ ++workerSetElement.numberOfWorkerElements;
+ // Add element sequentially to optimize memory at startup
+ if (this.workerOptions.elementStartDelay! > 0) {
+ await sleep(this.workerOptions.elementStartDelay!);