function asyncTaskRunner(tasks, concurrency) {
return new Promise((resolve, reject) => {
let completedCount = 0;
const results = [];
const taskQueue = tasks.slice();
const runningTasks = [];
function runNextTask() {
while (runningTasks.length < concurrency && taskQueue.length > 0) {
const task = taskQueue.shift();
const promise = task();
runningTasks.push(promise);
promise
.then(result => {
results.push(result);
completedCount++;
runningTasks.splice(runningTasks.indexOf(promise), 1);
if (completedCount === tasks.length) {
resolve(results);
} else {
runNextTask();
}
})
.catch(err => {
reject(err);
});
}
if (completedCount === tasks.length) {
resolve(results);
}
}
runNextTask();
});
}
性能优化点解释:
- 并发控制:通过
concurrency
参数限制同时执行的任务数量,避免过多任务同时执行导致资源耗尽,比如内存不足或者CPU过载,保证系统稳定运行。
- 任务队列:使用数组
taskQueue
来存储尚未执行的任务,通过shift
方法依次取出任务执行,确保所有任务都能被执行到。
- 动态任务调度:当有任务完成时,立即从任务队列中取出新任务执行(
runNextTask
函数),这样可以充分利用系统资源,尽快完成所有任务。
- 结果收集:使用数组
results
来存储每个任务的执行结果,方便在所有任务完成后统一返回。
- 错误处理:一旦有任何任务抛出错误,立即通过
reject
终止整个任务流程,避免无效的任务继续执行,提高性能和可靠性。