Files
SnowLuma/.pnpm-store/v11/files/d6/bf8be731583a95461bb8cb18fd60a1502e1262ecfb2f9f950bb6b6ac0f64da5139efacb7d353aa840c0aa82ec944bdbabf5d516b79688f7090b19f56e3453c
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

31 lines
813 B
Plaintext

//#region src/utils/concurrent.ts
/**
* @module
* Concurrent utility.
*/
const DEFAULT_CONCURRENCY = 1024;
const createPool = ({ concurrency, interval } = {}) => {
concurrency ||= DEFAULT_CONCURRENCY;
if (concurrency === Infinity) return { run: async (fn) => fn() };
const pool = /* @__PURE__ */ new Set();
const run = async (fn, promise, resolve) => {
if (pool.size >= concurrency) {
promise ||= new Promise((r) => resolve = r);
setTimeout(() => run(fn, promise, resolve));
return promise;
}
const marker = {};
pool.add(marker);
const result = await fn();
if (interval) setTimeout(() => pool.delete(marker), interval);
else pool.delete(marker);
if (resolve) {
resolve(result);
return promise;
} else return result;
};
return { run };
};
//#endregion
export { createPool };