- let destinationWorkerNodeKey!: number
- let minQueuedTasks = Infinity
- let executeTask = false
- for (const [workerNodeId, workerNode] of this.workerNodes.entries()) {
- if (workerNode.info.ready && workerNodeId !== workerNodeKey) {
- if (
- workerNode.usage.tasks.executing <
- (this.opts.tasksQueueOptions?.concurrency as number)
- ) {
- executeTask = true
- }
- if (workerNode.usage.tasks.queued === 0) {
- destinationWorkerNodeKey = workerNodeId
- break
- }
- if (workerNode.usage.tasks.queued < minQueuedTasks) {
- minQueuedTasks = workerNode.usage.tasks.queued
- destinationWorkerNodeKey = workerNodeId
- }
- }
+ const destinationWorkerNodeKey = this.workerNodes.reduce(
+ (minWorkerNodeKey, workerNode, workerNodeKey, workerNodes) => {
+ return workerNode.info.ready &&
+ workerNode.usage.tasks.queued <
+ workerNodes[minWorkerNodeKey].usage.tasks.queued
+ ? workerNodeKey
+ : minWorkerNodeKey
+ },
+ 0
+ )
+ const destinationWorkerNode = this.workerNodes[destinationWorkerNodeKey]
+ const task = {
+ ...(this.dequeueTask(workerNodeKey) as Task<Data>),
+ workerId: destinationWorkerNode.info.id as number