Hyperlinkv0.8.0-beta.28

Queue

Queue.takeUnsafeconsteffect/Queue.ts:1525
<A, E>(self: Dequeue<A, E>): Exit<A, E> | undefined

Attempts to take one message from the queue synchronously.

When to use

Use when polling queue internals must not suspend or register a waiting taker, and undefined is an acceptable result for an empty queue.

Details

Returns an Exit for an immediately available message or for the queue's terminal state. Returns undefined when no message is immediately available. This operation does not wait or register a taker.

Example (Taking one value synchronously)

import { Effect, Queue } from "effect"

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

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

  // Take a message synchronously
  const result1 = Queue.takeUnsafe(queue)
  console.log(result1) // Success(1) or Exit containing value 1

  const result2 = Queue.takeUnsafe(queue)
  console.log(result2) // Success(2)

  // No more messages - returns undefined
  const result3 = Queue.takeUnsafe(queue)
  console.log(result3) // undefined
})
taking
Source effect/Queue.ts:152518 lines
export const takeUnsafe = <A, E>(self: Dequeue<A, E>): Exit<A, E> | undefined => {
  if (self.state._tag === "Done") {
    return self.state.exit
  }
  if (self.messages.length > 0) {
    const message = MutableList.take(self.messages)!
    releaseCapacity(self)
    return core.exitSucceed(message)
  } else if (self.capacity <= 0 && self.state.offers.size > 0) {
    self.capacity = 1
    releaseCapacity(self)
    self.capacity = 0
    const message = MutableList.take(self.messages)!
    releaseCapacity(self)
    return core.exitSucceed(message)
  }
  return undefined
}
Referenced by 2 symbols