acquire method
Acquire one permit, waiting in FIFO order if none are free.
Implementation
Future<void> acquire() {
if (_permits > 0) {
_permits--;
return Future.value();
}
final c = Completer<void>();
_queue.add(c);
return c.future;
}