Files
openclaw/src/media-understanding/concurrency.ts

34 lines
837 B
TypeScript

import { logVerbose, shouldLogVerbose } from "../globals.js";
export async function runWithConcurrency<T>(
tasks: Array<() => Promise<T>>,
limit: number,
): Promise<T[]> {
if (tasks.length === 0) {
return [];
}
const resolvedLimit = Math.max(1, Math.min(limit, tasks.length));
const results: T[] = Array.from({ length: tasks.length });
let next = 0;
const workers = Array.from({ length: resolvedLimit }, async () => {
while (true) {
const index = next;
next += 1;
if (index >= tasks.length) {
return;
}
try {
results[index] = await tasks[index]();
} catch (err) {
if (shouldLogVerbose()) {
logVerbose(`Media understanding task failed: ${String(err)}`);
}
}
}
});
await Promise.allSettled(workers);
return results;
}