sleep function

Future<void> sleep(
  1. DRClock clock,
  2. int ms, [
  3. DRCancelToken? cancel
])

按给定的时钟等待;cancel 取消时以 aborted 抛出。

Implementation

Future<void> sleep(DRClock clock, int ms, [DRCancelToken? cancel]) {
  if (cancel?.isCancelled ?? false) return Future.error(abortedError());
  final completer = Completer<void>();
  void Function()? off;
  final timer = clock.setTimeout(() {
    off?.call();
    if (!completer.isCompleted) completer.complete();
  }, math.max(0, ms));
  if (cancel != null) {
    off = cancel.onCancel(() {
      timer.cancel();
      if (!completer.isCompleted) completer.completeError(abortedError());
    });
  }
  return completer.future;
}