+ const worker = workerSetElement.worker
+ const waitWorkerExit = new Promise<void>(resolve => {
+ worker.once('exit', () => {
+ resolve()
+ })
+ })
+ worker.unref()
+ await worker.terminate()
+ await waitWorkerExit
+ }
+ this.emitter?.emit(WorkerSetEvents.stopped, this.info)
+ this.started = false
+ this.emitter?.emitDestroy()
+ this.emitter?.removeAllListeners()
+ }
+
+ /** @inheritDoc */
+ public async addElement (elementData: WorkerData): Promise<void> {
+ if (!this.started) {
+ throw new Error('Cannot add a WorkerSet element: not started')
+ }
+ const workerSetElement = await this.getWorkerSetElement()
+ workerSetElement.worker.postMessage({
+ event: WorkerMessageEvents.addWorkerElement,
+ data: elementData
+ })
+ ++workerSetElement.numberOfWorkerElements
+ // Add element sequentially to optimize memory at startup
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ if (this.workerOptions.elementStartDelay! > 0) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ await sleep(randomizeDelay(this.workerOptions.elementStartDelay!))