close method

void close()

Closes the queue: blocks further pushes, fails every blocked producer and consumer with StateError, and lets consumers drain any already-buffered items (a pull on the empty closed queue then errors). Buffered items are NOT discarded — drain them before closing if they matter. Audited: 2026-06-12 11:26 EDT

Implementation

void close() {
  _isClosed = true;
  for (final (_, Completer<void> completer) in _pushWaiters) {
    completer.completeError(StateError('BoundedWorkQueue closed'), StackTrace.current);
  }
  _pushWaiters.clear();
  for (final Completer<T> completer in _pullWaiters) {
    completer.completeError(StateError('BoundedWorkQueue closed'), StackTrace.current);
  }
  _pullWaiters.clear();
}