import type { WorkerData, WorkerOptions } from './WorkerTypes.js'
import { randomizeDelay, sleep } from './WorkerUtils.js'
-export class WorkerDynamicPool extends WorkerAbstract<WorkerData> {
- private readonly pool: DynamicThreadPool<WorkerData>
+export class WorkerDynamicPool<D extends WorkerData, R extends WorkerData> extends WorkerAbstract<
+D,
+R
+> {
+ private readonly pool: DynamicThreadPool<D, R>
/**
* Creates a new `WorkerDynamicPool`.
*/
constructor (workerScript: string, workerOptions: WorkerOptions) {
super(workerScript, workerOptions)
- this.pool = new DynamicThreadPool<WorkerData>(
+ this.pool = new DynamicThreadPool<D, R>(
this.workerOptions.poolMinSize,
this.workerOptions.poolMaxSize,
this.workerScript,
}
/** @inheritDoc */
- public async start (): Promise<void> {
- // This is intentional
+ public start (): void {
+ this.pool.start()
}
/** @inheritDoc */
}
/** @inheritDoc */
- public async addElement (elementData: WorkerData): Promise<void> {
- await this.pool.execute(elementData)
+ public async addElement (elementData: D): Promise<R> {
+ const response = await this.pool.execute(elementData)
// Start element sequentially to optimize memory at startup
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.workerOptions.elementAddDelay! > 0 &&
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
(await sleep(randomizeDelay(this.workerOptions.elementAddDelay!)))
+ return response
}
}