lockAndRun<T> method
FutureOr<T>
lockAndRun<T>({
- required FutureOr<
T> run(- VoidCallback unlock
- Object? completerId,
Implementation
FutureOr<T> lockAndRun<T>({
required FutureOr<T> Function(VoidCallback unlock) run,
Object? completerId,
}) async {
final myCompleter = completerId == null
? Completer()
: registerCompleter(completerId);
_completerQueue.add(myCompleter);
for (final queuedCompleter in _completerQueue) {
if (queuedCompleter == myCompleter) break;
await queuedCompleter.future;
}
final value = await run(() => myCompleter.complete());
if (completerId != null) {
_completersById.remove(completerId);
}
_completerQueue.remove(myCompleter);
return value;
}