perf: speed up dynamic worker termination
[poolifier.git] / src / pools / abstract-pool.ts
index 086d7ee82550bc40c46781b83616c1639b32155b..09871491cb7a1ee5d6e7b4ded48696accb2e26e3 100644 (file)
@@ -10,6 +10,7 @@ import {
   DEFAULT_TASK_NAME,
   DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS,
   EMPTY_FUNCTION,
+  isAsyncFunction,
   isKillBehavior,
   isPlainObject,
   median,
@@ -913,7 +914,16 @@ export abstract class AbstractPool<
               this.tasksQueueSize(localWorkerNodeKey) === 0)))
       ) {
         // Kill message received from the worker: no new tasks are submitted to that worker for a while ( > maxInactiveTime)
-        void (this.destroyWorkerNode(localWorkerNodeKey) as Promise<void>)
+        const destroyWorkerNodeBounded = this.destroyWorkerNode.bind(this)
+        if (isAsyncFunction(destroyWorkerNodeBounded)) {
+          (
+            destroyWorkerNodeBounded as (workerNodeKey: number) => Promise<void>
+          )(localWorkerNodeKey).catch(EMPTY_FUNCTION)
+        } else {
+          (destroyWorkerNodeBounded as (workerNodeKey: number) => void)(
+            localWorkerNodeKey
+          )
+        }
       }
     })
     const workerInfo = this.getWorkerInfo(workerNodeKey)