js 并发任务

class TaskParallel{
    constructor(parallelcount=2){
        this.parallelcount=parallelcount;
        this.tasks=[];
        this.runningCount=0;
    }
    add(task){
        return new Promise((resolve,reject)=>{
            this.tasks.push({
                task,resolve,reject
            });
            this._runtask();
        })
    }
    _runtask(){
        while(this.runningCount<this.parallelcount && this.tasks.length>0){
            const {task,resolve,reject}=this.tasks.shift();
            this.runningCount++;
            task().then(resolve,reject).finally(()=>{
                this.runningCount--;
                this._runtask();
            })
        }

    }
}
function timeout(time){
    return new Promise((resolve)=>{
        setTimeout(()=>{resolve();},time)
    })
}
const superTask=new TaskParallel();
function addTask(time,name){
superTask.add(()=>timeout(time)).then(()=>console.log(`task ${name} finish`))
}

addTask(1000,'task1')
addTask(1000,'task11')
addTask(1000,'task21')
addTask(1000,'task31')

 

posted @ 2026-01-20 15:05  howhy  阅读(0)  评论(0)    收藏  举报