Package: effect
Module: Queue
Interrupts the queue gracefully, transitioning it to a closing state.
Details
This operation stops accepting new offers but allows existing messages to be consumed. Once all messages are drained, the queue transitions to the Done state with an interrupt cause.
Example (Interrupting queues gracefully)
import { Cause, Effect, Queue } from "effect"
const program = Effect.gen(function*() {
const queue = yield* Queue.bounded<number>(10)
// Add some messages
yield* Queue.offer(queue, 1)
yield* Queue.offer(queue, 2)
// Interrupt gracefully - no more offers accepted, but messages can be consumed
const interrupted = yield* Queue.interrupt(queue)
console.log(interrupted) // true
// Trying to offer more messages will return false
const offerResult = yield* Queue.offer(queue, 3)
console.log(offerResult) // false
// But we can still take existing messages
const message1 = yield* Queue.take(queue)
console.log(message1) // 1
const message2 = yield* Queue.take(queue)
console.log(message2) // 2
// After all messages are consumed, queue is done
const isDone = queue.state._tag === "Done"
console.log(isDone) // true
})
Signature
declare const interrupt: <A, E>(self: Enqueue<A, E>) => Effect<boolean>
Since v4.0.0