asyncWithResource<T> method

Future<T> asyncWithResource<T>(
  1. List<Resource> resources,
  2. Future<T> onAccept(),
  3. Future<T> onDeny()
)

Implementation

Future<T> asyncWithResource<T>(
  List<Resource> resources,
  Future<T> Function() onAccept,
  Future<T> Function() onDeny,
) {
  assert(resources.isNotEmpty);
  var token = _lockResource(resources);
  if (token == 0) {
    return onDeny();
  }
  try {
    final future = onAccept();
    future.whenComplete(() => _unlockResource(token));
    return future;
  } catch (e) {
    Alog.e(
        tag: _tag,
        moduleName: _moduleName,
        content: 'InvocationManager#asyncWithResource error $e');
    _unlockResource(token);
    rethrow;
  }
}