import {
type SetInfo,
type WorkerData,
+ type WorkerMessage,
WorkerMessageEvents,
type WorkerOptions,
type WorkerSetElement,
/** @inheritDoc */
public async stop(): Promise<void> {
for (const workerSetElement of this.workerSet) {
- const workerExitPromise = new Promise<void>((resolve) => {
- workerSetElement.worker.on('exit', () => {
+ const worker = workerSetElement.worker;
+ const waitWorkerExit = new Promise<void>((resolve) => {
+ worker.on('exit', () => {
resolve();
});
});
- await workerSetElement.worker.terminate();
- await workerExitPromise;
+ await worker.terminate();
+ await waitWorkerExit;
}
- this.workerSet.clear();
}
/** @inheritDoc */
}
const workerSetElement = await this.getWorkerSetElement();
workerSetElement.worker.postMessage({
- id: WorkerMessageEvents.startWorkerElement,
+ event: WorkerMessageEvents.startWorkerElement,
data: elementData,
});
++workerSetElement.numberOfWorkerElements;
'message',
this.workerOptions.poolOptions?.messageHandler ?? WorkerConstants.EMPTY_FUNCTION,
);
+ worker.on('message', (message: WorkerMessage<WorkerData>) => {
+ if (message.event === WorkerMessageEvents.startedWorkerElement) {
+ this.emitter?.emit(WorkerSetEvents.elementStarted, this.info);
+ } else if (message.event === WorkerMessageEvents.startWorkerElementError) {
+ this.emitter?.emit(WorkerSetEvents.elementError, message.data);
+ }
+ });
worker.on(
'error',
this.workerOptions.poolOptions?.errorHandler ?? WorkerConstants.EMPTY_FUNCTION,