Hyperlinkv0.8.0-beta.28

Semaphore

Semaphore.withPermitsconsteffect/Semaphore.ts:378
(self: Semaphore, permits: number): <A, E, R>(
  effect: Effect.Effect<A, E, R>
) => Effect.Effect<A, E, R>
<A, E, R>(
  self: Semaphore,
  permits: number,
  effect: Effect.Effect<A, E, R>
): Effect.Effect<A, E, R>

Runs an effect with the given number of permits and releases the permits when the effect completes.

When to use

Use to run an effect while holding a specified number of semaphore permits for the duration of that effect.

Details

The effect waits until enough permits are available. Acquired permits are released when the wrapped effect exits.

export const withPermits: {
  (self: Semaphore, permits: number): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
  <A, E, R>(self: Semaphore, permits: number, effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R>
} = ((self: Semaphore, permits: number, effect?: Effect.Effect<any, any, any>) => {
  const withPermits = self.withPermits(permits)
  return effect ? withPermits(effect) : withPermits
}) as any