pollFuture method

Future<TimeoutObservation<T>> pollFuture(
  1. BigInt now,
  2. FutureOr<TimeoutOperation<T>> operation(),
  3. FutureOr<TimeoutCancellation> cancellation()
)

Future adapter for caller-owned async operation and cancellation seams.

Implementation

Future<TimeoutObservation<T>> pollFuture(
  BigInt now,
  FutureOr<TimeoutOperation<T>> Function() operation,
  FutureOr<TimeoutCancellation> Function() cancellation,
) async {
  final immediate = _beforeAdapters(now);
  if (immediate != null) return immediate;
  // Invoke both before awaiting either, preserving the sync adapter's
  // exactly-once contract and result precedence.
  final operationResult = Future<TimeoutOperation<T>>.sync(operation);
  final cancellationResult = Future<TimeoutCancellation>.sync(cancellation);
  return _settle(
    await operationResult,
    await cancellationResult,
  );
}