dispose method
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'),
);
}
}
}