- private async startWorker() {
- return new Promise((resolve, reject) => {
- const worker = new Worker(this.workerScript);
- worker.on('message', resolve);
- worker.on('error', reject);
- worker.on('exit', (code) => {
- if (code !== 0) {
- reject(new Error(`Worker stopped with exit code ${code}`));
- }
- });
- this.workers.add({ worker, numberOfWorkerElements: 0 });
+ public async stop(): Promise<void> {
+ for (const workerSetElement of this.workerSet) {
+ await workerSetElement.worker.terminate();
+ }
+ this.workerSet.clear();
+ }
+
+ /**
+ * Start a new `Worker`.
+ */
+ private async startWorker(): Promise<void> {
+ const worker = new Worker(this.workerScript);
+ worker.on(
+ 'message',
+ (this.workerOptions?.messageHandler ?? WorkerConstants.EMPTY_FUNCTION).bind(
+ this
+ ) as MessageHandler<Worker>
+ );
+ worker.on('error', WorkerUtils.defaultErrorHandler.bind(this) as (err: Error) => void);
+ worker.on('exit', (code) => {
+ WorkerUtils.defaultExitHandler(code);
+ this.workerSet.delete(this.getWorkerSetElementByWorker(worker));