X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fworker%2FWorkerSet.ts;h=d761a12abe2eef9a133781b5c5f8ed1d53f178f8;hb=c36e3cf0312f553b4b8c2b716da0d55cc87450cf;hp=a2e6faf02fbf04063256cbd1533f80f7ce3bef68;hpb=d972af76b6d7d1d2a099d254eacf45245b5316ac;p=e-mobility-charging-stations-simulator.git diff --git a/src/worker/WorkerSet.ts b/src/worker/WorkerSet.ts index a2e6faf0..d761a12a 100644 --- a/src/worker/WorkerSet.ts +++ b/src/worker/WorkerSet.ts @@ -72,7 +72,13 @@ export class WorkerSet extends WorkerAbstract { /** @inheritDoc */ public async stop(): Promise { for (const workerSetElement of this.workerSet) { + const workerExitPromise = new Promise((resolve) => { + workerSetElement.worker.on('exit', () => { + resolve(); + }); + }); await workerSetElement.worker.terminate(); + await workerExitPromise; } this.workerSet.clear(); } @@ -126,12 +132,18 @@ export class WorkerSet extends WorkerAbstract { 'exit', this.workerOptions?.poolOptions?.exitHandler ?? WorkerConstants.EMPTY_FUNCTION ); - worker.once('exit', () => this.workerSet.delete(this.getWorkerSetElementByWorker(worker))); + worker.once('exit', () => + this.removeWorkerSetElement(this.getWorkerSetElementByWorker(worker)) + ); const workerSetElement: WorkerSetElement = { worker, numberOfWorkerElements: 0 }; this.workerSet.add(workerSetElement); return workerSetElement; } + private removeWorkerSetElement(workerSetElement: WorkerSetElement): void { + this.workerSet.delete(workerSetElement); + } + private async getWorkerSetElement(): Promise { let chosenWorkerSetElement: WorkerSetElement; for (const workerSetElement of this.workerSet) {