handleCancellationAndTimeout<T> function

void handleCancellationAndTimeout<T>(
  1. Completer<T> completer, {
  2. CancellationToken? cancellationToken,
  3. Duration? timeout,
  4. void onCancelledOrTimedOut()?,
  5. required String operationName,
})

Handles cancellation and timeout for a given operation.

This method sets up listeners for cancellation and timeout events, completing the provided completer with an error if either occurs.

Implementation

void handleCancellationAndTimeout<T>(
  Completer<T> completer, {
  CancellationToken? cancellationToken,
  Duration? timeout,
  void Function()? onCancelledOrTimedOut,
  required String operationName,
}) {
  if (cancellationToken != null) {
    cancellationToken.whenCancelled.then((_) {
      if (!completer.isCompleted) {
        onCancelledOrTimedOut?.call();
        completer.completeError(
          CancellationException('$operationName cancelled'),
        );
      }
    });
  }

  if (timeout != null) {
    Future.delayed(timeout).then((_) {
      if (!completer.isCompleted) {
        onCancelledOrTimedOut?.call();
        completer.completeError(
          TimeoutException('$operationName timed out after $timeout'),
        );
      }
    });
  }
}