(self: TxSemaphore, n: number): Effect.Effect<void>Releases the specified number of permits back to the semaphore.
When to use
Use to manually return multiple permits after a transactional acquire.
Details
The available permit count is capped at the semaphore capacity.
Gotchas
Passing a non-positive n dies with a defect.
Example (Releasing multiple permits)
import { Console, Effect, TxSemaphore } from "effect"
const program = Effect.gen(function*() {
const semaphore = yield* TxSemaphore.make(5)
// Acquire 3 permits
yield* TxSemaphore.acquireN(semaphore, 3)
let available = yield* TxSemaphore.available(semaphore)
yield* Console.log(`After acquire: ${available}`) // 2
// Release 2 permits
yield* TxSemaphore.releaseN(semaphore, 2)
available = yield* TxSemaphore.available(semaphore)
yield* Console.log(`After release: ${available}`) // 4
})Source effect/TxSemaphore.ts:4759 lines
export const const releaseN: (
self: TxSemaphore,
n: number
) => Effect.Effect<void>
Releases the specified number of permits back to the semaphore.
When to use
Use to manually return multiple permits after a transactional acquire.
Details
The available permit count is capped at the semaphore capacity.
Gotchas
Passing a non-positive n dies with a defect.
Example (Releasing multiple permits)
import { Console, Effect, TxSemaphore } from "effect"
const program = Effect.gen(function*() {
const semaphore = yield* TxSemaphore.make(5)
// Acquire 3 permits
yield* TxSemaphore.acquireN(semaphore, 3)
let available = yield* TxSemaphore.available(semaphore)
yield* Console.log(`After acquire: ${available}`) // 2
// Release 2 permits
yield* TxSemaphore.releaseN(semaphore, 2)
available = yield* TxSemaphore.available(semaphore)
yield* Console.log(`After release: ${available}`) // 4
})
releaseN = (self: TxSemaphore(parameter) self: {
permitsRef: TxRef.TxRef<number>;
capacity: number;
toString: () => string;
toJSON: () => unknown;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self: TxSemaphore, n: numbern: number): import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<void> => {
if (n: numbern <= 0) {
return import EffectEffect.die(new var Error: ErrorConstructor
new (message?: string, options?: ErrorOptions) => Error (+1 overload)
Error("Number of permits must be positive"))
}
return import TxRefTxRef.update(self: TxSemaphore(parameter) self: {
permitsRef: TxRef.TxRef<number>;
capacity: number;
toString: () => string;
toJSON: () => unknown;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.TxSemaphore.permitsRef: TxRef.TxRef<number>(property) TxSemaphore.permitsRef: {
version: number;
pending: Map<unknown, () => void>;
value: A;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
permitsRef, (permits: numberpermits: number) => {
const const newPermits: numbernewPermits = permits: numberpermits + n: numbern
return const newPermits: numbernewPermits > self: TxSemaphore(parameter) self: {
permitsRef: TxRef.TxRef<number>;
capacity: number;
toString: () => string;
toJSON: () => unknown;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.TxSemaphore.capacity: numbercapacity ? self: TxSemaphore(parameter) self: {
permitsRef: TxRef.TxRef<number>;
capacity: number;
toString: () => string;
toJSON: () => unknown;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.TxSemaphore.capacity: numbercapacity : const newPermits: numbernewPermits
})
}Referenced by 1 symbols