function range(n: number): number[] { return Array.from({ length: n }, (_, i) => i); } async function sleep(ms: number): Promise { await new Promise((r) => setTimeout(r, ms)); } let taskId = 0; async function createTask(): Promise { const id = taskId++; console.log(`${id}: inside lock`); const resp = (await fetch(`http://localhost:8000/proc/${id}`)).status; console.log(`${id}: wait`); await sleep(100); console.log(`${id}: done`); return resp; } async function main() { const lock = new Semaphore(2); const promises = range(7).map((i) => { console.log(`${i}: enqueue`); return lock.run(createTask); }); const results = await Promise.all(promises); console.log(results); } await main();