Async.js 队列工作人员未完成
Async.js queue worker not finishing
使用以下代码建立使用 robocopy 执行复制操作的作业队列:
interface copyProcessReturn {
jobId: number,
code: number,
description: string,
params: string[],
source: string,
target: string,
jobsLeft: number
}
export default class CopyHandler {
private aQueue: AsyncQueue<copyProcess>;
constructor() {
let that = this;
this.aQueue = async.queue(function (cp: copyProcess) {
that.performCopy(cp);
that.copy_complete();
}, 1);
}
private copy_complete() {
// NOP
}
public addCopyProcess(cp: copyProcess): void {
this.aQueue.push(cp);
}
目的是一次执行一个复制进程,同时通过向队列添加额外的复制进程来保持并发性。
这对第一份工作很好,其他工作也能正确排队。然而,即使在作业完成后正确调用 copy_complete() 回调,它的工作人员也不会被释放,队列中的其他作业仍未处理。
非常感谢您的提示。
async.queue 中的函数有两个参数,第二个是回调函数,你需要在 that.copy_complete();
之后调用它让异步库知道它已经完成并且它可以 运行 next fn在队列中。类似于:
this.aQueue = async.queue(function (cp, next) {
that.performCopy(cp);
that.copy_complete();
next();
}, 1);
使用以下代码建立使用 robocopy 执行复制操作的作业队列:
interface copyProcessReturn {
jobId: number,
code: number,
description: string,
params: string[],
source: string,
target: string,
jobsLeft: number
}
export default class CopyHandler {
private aQueue: AsyncQueue<copyProcess>;
constructor() {
let that = this;
this.aQueue = async.queue(function (cp: copyProcess) {
that.performCopy(cp);
that.copy_complete();
}, 1);
}
private copy_complete() {
// NOP
}
public addCopyProcess(cp: copyProcess): void {
this.aQueue.push(cp);
}
目的是一次执行一个复制进程,同时通过向队列添加额外的复制进程来保持并发性。
这对第一份工作很好,其他工作也能正确排队。然而,即使在作业完成后正确调用 copy_complete() 回调,它的工作人员也不会被释放,队列中的其他作业仍未处理。
非常感谢您的提示。
async.queue 中的函数有两个参数,第二个是回调函数,你需要在 that.copy_complete();
之后调用它让异步库知道它已经完成并且它可以 运行 next fn在队列中。类似于:
this.aQueue = async.queue(function (cp, next) {
that.performCopy(cp);
that.copy_complete();
next();
}, 1);