dispose method

Future<void> dispose({
  1. int drainTurns = 8,
})

Closes the shared port and settles every pending call. Drains up to drainTurns event-loop turns first so already-posted results complete normally; whatever remains is completed with a StateError. Idempotent.

Implementation

Future<void> dispose({int drainTurns = 8}) async {
  if (_disposed) return;
  _disposed = true;
  for (var i = 0; i < drainTurns && _pending.isNotEmpty; i++) {
    await Future<void>.delayed(Duration.zero);
  }
  await _sub.cancel();
  _port.close();
  final abandoned = _pending.values.toList();
  _pending.clear();
  for (final completer in abandoned) {
    if (!completer.isCompleted) {
      completer.completeError(
        StateError('NitroCoalescer was disposed before this call completed'),
      );
    }
  }
}