API reference › @evolu/common › Task › createSemaphore
function createSemaphore(permits: Concurrency): Semaphore;
Defined in: packages/common/src/Task.ts:2469
Creates a Semaphore that limits concurrent Tasks.
Example
await using run = createRun();
const semaphore = createSemaphore(PositiveInt.orThrow(2));
const fetchUser =
(id: string): Task<string> =>
async (run) => {
const { console } = run.deps;
console.log("[demo]", "start", id);
const slept = await run(sleep("10ms"));
if (!slept.ok) return slept;
console.log("[demo]", "end", id);
return ok(`user:${id}`);
};
const fetchWithPermit = (id: string) => semaphore.withPermit(fetchUser(id));
await Promise.all([
run(fetchWithPermit("1")),
run(fetchWithPermit("2")),
run(fetchWithPermit("3")),
]);
// [demo] start 1
// [demo] start 2
// [demo] end 1
// [demo] start 3
// [demo] end 2
// [demo] end 3