+ private async getWorkerSetElement(): Promise<WorkerSetElement> {
+ let chosenWorkerSetElement: WorkerSetElement | undefined;
+ for (const workerSetElement of this.workerSet) {
+ if (workerSetElement.numberOfWorkerElements < this.workerOptions.elementsPerWorker!) {
+ chosenWorkerSetElement = workerSetElement;
+ break;
+ }
+ }
+ if (!chosenWorkerSetElement) {
+ chosenWorkerSetElement = this.addWorkerSetElement();
+ // Add worker set element sequentially to optimize memory at startup
+ this.workerOptions.workerStartDelay! > 0 &&
+ (await sleep(this.workerOptions.workerStartDelay!));
+ }
+ return chosenWorkerSetElement;