Hyperlinkv0.8.0-beta.28

Queue

Queue.interruptconsteffect/Queue.ts:1077
<A, E>(self: Enqueue<A, E>): Effect<boolean>

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
})
completion
Source effect/Queue.ts:10772 lines
export const interrupt = <A, E>(self: Enqueue<A, E>): Effect<boolean> =>
  core.withFiber((fiber) => failCause(self, internalEffect.causeInterrupt(fiber.id)))