Hyperlinkv0.8.0-beta.28

Queue

Queue.endUnsafeconsteffect/Queue.ts:1031
<A, E>(self: Enqueue<A, E | Done>): boolean

Signals queue completion synchronously.

When to use

Use when implementing low-level queue integrations that must complete a queue without wrapping the operation in Effect.

Details

Returns false if the queue is already done.

Gotchas

This is an unsafe operation that directly modifies the queue without Effect wrapping.

Example (Ending queues synchronously)

import { Cause, Effect, Queue } from "effect"

// Create a queue and use unsafe operations
const program = Effect.gen(function*() {
  const queue = yield* Queue.bounded<number, Cause.Done>(10)

  // Add some messages
  Queue.offerUnsafe(queue, 1)
  Queue.offerUnsafe(queue, 2)

  // End the queue synchronously
  const ended = Queue.endUnsafe(queue)
  console.log(ended) // true

  // Existing messages can still be consumed while the queue is closing
  console.log(queue.state._tag) // "Closing"

  Queue.takeUnsafe(queue)
  Queue.takeUnsafe(queue)

  // After buffered messages are consumed, the queue is done
  console.log(queue.state._tag) // "Done"
})
completion
Source effect/Queue.ts:10311 lines
export const endUnsafe = <A, E>(self: Enqueue<A, E | Done>) => failCauseUnsafe(self, core.causeFail(core.Done()))
Referenced by 3 symbols