safeAsync<T> static method

Future<T?> safeAsync<T>(
  1. Future<T> operation(), {
  2. String? operationName,
  3. T? fallback,
})

Implementation

static Future<T?> safeAsync<T>(
  Future<T> Function() operation, {
  String? operationName,
  T? fallback,
}) async {
  final opName = operationName ?? 'unknown_async_operation';

  // Check circuit breaker first
  if (ObslyCircuitBreaker.isOpen(opName)) {
    ObslyLogger.debug('Circuit breaker open for $opName, returning fallback');
    return fallback;
  }

  try {
    ObslyLogger.verbose('🛡️ Executing defensive async operation: $opName');
    final result = await operation();
    ObslyCircuitBreaker.recordSuccess(opName);
    ObslyLogger.verbose('✅ Defensive async operation successful: $opName');
    return result;
  } catch (e, stack) {
    ObslyCircuitBreaker.recordFailure(opName);

    // Enhanced error logging with context
    ObslyLogger.errorWithContext(
      'DefensiveExecution',
      'safeAsync',
      'Defensive execution caught async error in $opName: $e',
      stack,
      context: {
        'operationName': opName,
        'hasFallback': fallback != null,
        'fallbackType': fallback?.runtimeType.toString(),
        'operationType': 'async',
      },
    );

    return fallback;
  }
}