lockAndRun<T> method
Locks the mutex, runs the provided function, and releases the lock.
The provided run function receives an unlock callback that must be called
when the operation is complete to release the lock.
Parameters:
run- Function to execute with the lock
Returns the result of the run function
Implementation
FutureOr<T> lockAndRun<T>({
required FutureOr<T> Function(VoidCallback unlock) run,
}) async {
final completer = Completer<void>();
_completerQueue.add(completer);
if (_completerQueue.first != completer) {
await _completerQueue.removeFirst().future;
}
final value = await run(() => completer.complete());
_completerQueue.remove(completer);
return value;
}