run<T extends Object> static method
Implementation
static Future<Result<T>> run<T extends Object>(
String operation,
Future<Result<T>> Function() action,
) async {
final context = NativeCallContext._();
try {
final result = await runZoned(action, zoneValues: {_key: context});
final pending = context.failure;
if (pending != null) {
final primary = result.exceptionOrNull();
if (primary is OdbcError && !identical(primary, pending)) {
return Failure(primary.withSecondary(pending));
}
return Failure(pending);
}
return result;
} on AsyncError catch (error, stack) {
final captured = context.failure;
if (captured != null) {
throw captured.withDetails(
captured.details.copyWith(
cause: error,
stackTrace: stack,
),
);
}
throw translateOdbcError(
error,
operation: operation,
stackTrace: stack,
);
}
}