+ private async getWorkerSetElement(): Promise<WorkerSetElement> {
+ let chosenWorkerSetElement: WorkerSetElement;
+ 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;