AsyncQueueExecutor
Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:38
有并发上限的异步任务队列。
任务按入队顺序开始执行,但完成顺序取决于各自耗时,不保证有序。 单个任务失败只让它自己的 Promise reject,不影响队列继续消费后续任务。
Example
const executor = new AsyncQueueExecutor(2);
const result = await executor.addTask(() => fetch(url));
await executor.waitForAll();
Constructors
Constructor
new AsyncQueueExecutor(maxConcurrent?): AsyncQueueExecutor;
Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:49
Parameters
| Parameter | Type | Default value | Description |
|---|---|---|---|
maxConcurrent | number | 3 | 并发上限,默认 3 |
Returns
AsyncQueueExecutor
Throws
RangeError maxConcurrent 不是正的安全整数
Methods
addTask()
addTask<T>(task, id?): Promise<T>;
Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:65
入队一个任务,返回其结果。
传了 id 且同 id 的任务尚未结算时,直接复用已有 Promise,不会重复执行;
任务结算(无论成功失败)后同一个 id 可以再次入队。
Type Parameters
| Type Parameter |
|---|
T |
Parameters
| Parameter | Type | Description |
|---|---|---|
task | () => T | Promise<T> | 任务函数,可返回同步值或 Promise |
id? | TaskId | 可选去重标识 |
Returns
Promise<T>
任务结果;任务抛错时以同一个异常 reject;
排队期间被 AsyncQueueExecutor.clearQueue 取消时以
Error('Task cancelled: queue cleared') reject
clearQueue()
clearQueue(): void;
Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:122
清空尚未开始的任务。
每个被取消任务的 Promise 以 Error('Task cancelled: queue cleared') reject,
并从去重表中移除。已在执行的任务不受影响,会继续跑完。
Returns
void
getQueuedCount()
getQueuedCount(): number;
Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:160
仍在排队的任务数。
Returns
number
排队中的任务数,等价于 getStatus().queued
getRunningCount()
getRunningCount(): number;
Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:151
正在执行的任务数。
Returns
number
执行中的任务数,等价于 getStatus().running
getStatus()
getStatus(): ExecutorStatus;
Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:95
读取当前队列状态的快照。
Returns
执行中 / 排队中数量与当前并发上限;返回的是普通对象,不随后续变化更新
setMaxConcurrent()
setMaxConcurrent(newMax): void;
Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:111
调整并发上限。
调高会立即补跑排队中的任务;调低不会中断已在执行的任务,只影响后续调度。
Parameters
| Parameter | Type | Description |
|---|---|---|
newMax | number | 新的并发上限 |
Returns
void
Throws
RangeError newMax 不是正的安全整数
waitForAll()
waitForAll(): Promise<void>;
Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:141
等待队列排空。
队列本就是空的时候立即 resolve。永远不会 reject:任务失败由 AsyncQueueExecutor.addTask 返回的 Promise 单独承担,这里只表示「都结算完了」。 排空后再入队新任务不影响已经 resolve 的 Promise,需要重新调用。
Returns
Promise<void>
队列中执行中与排队中任务都结算后 resolve