(self: TxSemaphore, n: number): Effect.Effect<boolean>Tries to acquire the specified number of permits from the semaphore without
blocking, returning true if successful or false if not enough permits are
available.
When to use
Use to attempt a multi-permit acquisition without retrying when not enough permits are available.
Example (Trying to acquire multiple permits)
import { Console, Effect, TxSemaphore } from "effect"
const program = Effect.gen(function*() {
const semaphore = yield* TxSemaphore.make(3)
// Try to acquire 2 permits (should succeed)
const first = yield* TxSemaphore.tryAcquireN(semaphore, 2)
yield* Console.log(`First try (2 permits): ${first}`) // true
// Try to acquire 2 more permits (should fail, only 1 left)
const second = yield* TxSemaphore.tryAcquireN(semaphore, 2)
yield* Console.log(`Second try (2 permits): ${second}`) // false
})Source effect/TxSemaphore.ts:38011 lines
export const const tryAcquireN: (
self: TxSemaphore,
n: number
) => Effect.Effect<boolean>
Tries to acquire the specified number of permits from the semaphore without
blocking, returning true if successful or false if not enough permits are
available.
When to use
Use to attempt a multi-permit acquisition without retrying when not enough
permits are available.
Example (Trying to acquire multiple permits)
import { Console, Effect, TxSemaphore } from "effect"
const program = Effect.gen(function*() {
const semaphore = yield* TxSemaphore.make(3)
// Try to acquire 2 permits (should succeed)
const first = yield* TxSemaphore.tryAcquireN(semaphore, 2)
yield* Console.log(`First try (2 permits): ${first}`) // true
// Try to acquire 2 more permits (should fail, only 1 left)
const second = yield* TxSemaphore.tryAcquireN(semaphore, 2)
yield* Console.log(`Second try (2 permits): ${second}`) // false
})
tryAcquireN = (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<boolean> => {
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.modify(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) => {
if (permits: numberpermits >= n: numbern) {
return [true, permits: numberpermits - n: numbern]
}
return [false, permits: numberpermits]
})
}