sleep function
按给定的时钟等待;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;
}