lockAndRun<T> method

FutureOr<T> lockAndRun<T>({
  1. required FutureOr<T> run(
    1. void unlock()
    ),
})

Implementation

FutureOr<T> lockAndRun<T>({
  required FutureOr<T> Function(void Function() unlock) run,
}) async {
  final completer = Completer();
  _completerQueue.add(completer);
  if (_completerQueue.first != completer) {
    await _completerQueue.removeFirst().future;
  }
  final value = await run(() => completer.complete());
  _completerQueue.remove(completer);
  return value;
}