// Partial Copyright Jerome Benoit. 2021. All Rights Reserved.
-import { WorkerData, WorkerMessageEvents, WorkerOptions, WorkerSetElement } from '../types/Worker';
+import { Worker } from 'worker_threads';
+import { WorkerData, WorkerMessageEvents, WorkerOptions, WorkerSetElement } from '../types/Worker';
import Utils from '../utils/Utils';
-import { Worker } from 'worker_threads';
import WorkerAbstract from './WorkerAbstract';
import { WorkerUtils } from './WorkerUtils';
export default class WorkerSet extends WorkerAbstract<WorkerData> {
private readonly workerSet: Set<WorkerSetElement>;
- private readonly messageHandler: (message: unknown) => void | Promise<void>;
+ private readonly messageHandler: (message: unknown) => void;
/**
* Create a new `WorkerSet`.
throw new Error("Cannot add a WorkerSet element: workers' set does not exist");
}
if (
+ this.workerSet.size === 0 ||
this.getLastWorkerSetElement().numberOfWorkerElements >= this.workerOptions.elementsPerWorker
) {
await this.startWorker();
*/
private async startWorker(): Promise<void> {
const worker = new Worker(this.workerScript);
- worker.on('message', (msg) => {
- (async () => {
- await this.messageHandler(msg);
- })().catch(() => {
- /* This is intentional */
- });
- });
- worker.on('error', () => {
- /* This is intentional */
- });
+ worker.on('message', this.messageHandler);
+ worker.on('error', WorkerUtils.defaultErrorHandler);
worker.on('exit', (code) => {
WorkerUtils.defaultExitHandler(code);
this.workerSet.delete(this.getWorkerSetElementByWorker(worker));