import { WorkerData } from '../types/Worker';
import { WorkerUtils } from './WorkerUtils';
-export default class WorkerDynamicPool<T> extends WorkerAbstract {
- private pool: DynamicThreadPool<WorkerData>;
+export default class WorkerDynamicPool extends WorkerAbstract<WorkerData> {
+ private readonly pool: DynamicThreadPool<WorkerData>;
/**
* Create a new `WorkerDynamicPool`.
* @param max
* @param workerStartDelay
* @param opts
- * @param messageListenerCallback
*/
- constructor(workerScript: string, min: number, max: number, workerStartDelay?: number, opts?: PoolOptions<Worker>,
- messageListenerCallback: (message: any) => void = () => { /* This is intentional */ }) {
- super(workerScript, workerStartDelay, messageListenerCallback);
+ constructor(workerScript: string, min: number, max: number, workerStartDelay?: number, opts?: PoolOptions<Worker>) {
+ super(workerScript, workerStartDelay);
opts.exitHandler = opts?.exitHandler ?? WorkerUtils.defaultExitHandler;
this.pool = new DynamicThreadPool<WorkerData>(min, max, this.workerScript, opts);
}
* @returns
* @public
*/
- // eslint-disable-next-line @typescript-eslint/no-empty-function
public async start(): Promise<void> {
// This is intentional
}
* @returns
* @public
*/
- // eslint-disable-next-line @typescript-eslint/require-await
public async stop(): Promise<void> {
return this.pool.destroy();
}
* @returns
* @public
*/
- public async addElement(elementData: T): Promise<void> {
+ public async addElement(elementData: WorkerData): Promise<void> {
await this.pool.execute(elementData);
// Start worker sequentially to optimize memory at startup
await Utils.sleep(this.workerStartDelay);