Hyperlinkv0.8.0-beta.28

Queue

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

Shuts down the queue immediately, discarding buffered messages and resuming pending operations.

Details

The operation is idempotent and returns true, including when the queue has already been shut down or completed.

Example (Shutting down queues)

import { Effect, Queue } from "effect"

const program = Effect.gen(function*() {
  const queue = yield* Queue.bounded<number>(2)

  // Add messages
  yield* Queue.offer(queue, 1)
  yield* Queue.offer(queue, 2)

  // Shutdown clears buffered messages and prevents further offers
  const wasShutdown = yield* Queue.shutdown(queue)
  console.log(wasShutdown) // true

  // Queue is now done and cleared
  const size = yield* Queue.size(queue)
  console.log(size) // 0
})
completion
Source effect/Queue.ts:111420 lines
export const shutdown = <A, E>(self: Enqueue<A, E>): Effect<boolean> =>
  internalEffect.sync(() => {
    if (self.state._tag === "Done") {
      return true
    }
    MutableList.clear(self.messages)
    const offers = self.state.offers
    finalize(self, self.state._tag === "Open" ? exitInterrupt : self.state.exit)
    if (offers.size > 0) {
      for (const entry of offers) {
        if (entry._tag === "Single") {
          entry.resume(exitFalse)
        } else {
          entry.resume(core.exitSucceed(entry.remaining.slice(entry.offset)))
        }
      }
      offers.clear()
    }
    return true
  })
Referenced by 6 symbols