MessageValue,
PromiseWorkerResponseWrapper
} from '../utility-types'
+import { EMPTY_FUNCTION } from '../utils'
import { isKillBehavior, KillBehaviors } from '../worker/worker-options'
import type { IPoolInternal } from './pool-internal'
import { PoolEmitter, PoolType } from './pool-internal'
WorkerChoiceStrategyContext
} from './selection-strategies'
-/**
- * An intentional empty function.
- */
-const EMPTY_FUNCTION: () => void = () => {
- /* Intentionally empty */
-}
-
/**
* Callback invoked if the worker raised an error.
*/
this,
() => {
const workerCreated = this.createAndSetupWorker()
- this.registerWorkerMessageListener(workerCreated, message => {
+ this.registerWorkerMessageListener(workerCreated, async message => {
const tasksInProgress = this.tasks.get(workerCreated)
if (
isKillBehavior(KillBehaviors.HARD, message.kill) ||
tasksInProgress === 0
) {
// Kill received from the worker, means that no new tasks are submitted to that worker for a while ( > maxInactiveTime)
- void this.destroyWorker(workerCreated)
+ await this.destroyWorker(workerCreated)
}
})
return workerCreated
public execute (data: Data): Promise<Response> {
// Configure worker to handle message with the specified task
const worker = this.chooseWorker()
- this.increaseWorkersTask(worker)
- this.checkAndEmitBusy()
const messageId = ++this.nextMessageId
const res = this.internalExecute(worker, messageId)
+ this.checkAndEmitBusy()
this.sendToWorker(worker, { data: data || ({} as Data), id: messageId })
return res
}
worker: Worker,
messageId: number
): Promise<Response> {
+ this.increaseWorkersTask(worker)
return new Promise<Response>((resolve, reject) => {
this.promiseMap.set(messageId, { resolve, reject, worker })
})