| 35 | * failure, or interruption. |
| 36 | */ |
| 37 | export function SEM_withPermitsDuration(permits: number, duration: Duration.Duration) { |
| 38 | return (self: Semaphore): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R> => { |
| 39 | return <A, E, R>(effect: Effect.Effect<A, E, R>) => |
| 40 | Effect.uninterruptibleMask( |
| 41 | (restore) => |
| 42 | restore(self.take(permits)) |
| 43 | .pipe(Effect.andThen( |
| 44 | restore(effect) |
| 45 | .pipe(Effect.ensuring( |
| 46 | Effect.delay(self.release(permits), duration) |
| 47 | )) |
| 48 | )) |
| 49 | ) |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | export interface BatchOptions { |
| 54 | readonly concurrency?: Concurrency | undefined |