Spaces:
Paused
Paused
| 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; | |
| } | |