dart:async

支持异步编程,包括 Future 和 Stream 等类。

FutureStream 是 Dart 中异步编程的基本构建块。通过 asyncasync* 函数语言直接支持,并通过 dart:core 库对所有库开放。

本库提供进一步的工具来创建、消费和转换 futures 和 streams,以及直接访问其他异步原语,如 TimerscheduleMicrotaskZone

在您的代码中使用此库

import 'dart:async';

Future

Future 对象表示一个可能在未来某个时间点返回值的计算。Future 在完成时返回计算的值。Future 通常用于使用不同线程或隔离实现的 API(例如,dart:io 中的异步 I/O 操作或 dart:html 中的 HTTP 请求)。

Dart 库中的许多方法在执行任务时返回 Future。例如,将 HttpServer 绑定到主机和端口时,bind() 方法返回一个 Future

 HttpServer.bind('127.0.0.1', 4444)
     .then((server) => print('${server.isBroadcast}'))
     .catchError(print);

Future.then 注册了一个回调函数,该函数在 Future 的操作(例如 bind() 方法)成功完成时运行。操作返回的值传递到回调函数中。在本例中,bind() 方法返回 HttpServer 对象。回调函数打印其中一个属性。 Future.catchError 注册了一个回调函数,如果 Future 内部发生错误,则运行此函数。

Stream

Stream 提供了异步数据序列。数据序列的例子包括单个事件,如鼠标点击,或较大数据序列的连续块,如包含文件内容的多个字节列表。以下示例打开文件进行读取。 Stream.listen 注册了每次更多数据可用、发生错误或流完成后将运行的回调函数。在 Stream 上提供了更多功能,通过调用 Stream.listen 获取实际数据来实现。

Stream<List<int>> stream = File('quotes.txt').openRead();
stream.transform(utf8.decoder).forEach(print);

此流发出一系列的字节列表。然后程序必须以某种方式处理这些字节列表。在此,代码使用 UTF-8 解码器(提供在 dart:convert 库中)将字节序列转换为 Dart 字符串序列。

流的另一个常用用途是在 Web 应用中对用户生成的事件进行监听:以下代码监听按钮上的鼠标点击。

querySelector('#myButton')!.onClick.forEach((_) => print('Click.'));

其他资源

Completer<T>
生成Future对象的方法,稍后可以使用值或错误来完成它们。
EventSink<T>
支持添加错误的Sink
Future<T>
异步计算的结果。
FutureOr<T>
表示值可以是Future<T>T的类型。
MultiStreamController<T>
Stream.multi提供的高级流控制器。
Stream<T>
异步数据事件的来源。
StreamConsumer<S>
接受多个整个流的抽象接口。
StreamController<T>
包含它控制的流的控制器。
StreamIterator<T>
类似于Iterator的接口,用于Stream的值。
StreamSink<S>
一个同步和异步地接受流事件的的对象。
StreamSubscription<T>
Stream事件的订阅。
StreamTransformer<S, T>
转换流。
StreamTransformerBase<S, T>
StreamTransformer实现的基类。
StreamView<T>
仅暴露Stream接口的Stream包装。
SynchronousStreamController<T>
同步交付事件的流控制器。
定时器
可以配置为一次性或重复触发的倒计时定时器。
区域
区域代表在异步调用间保持稳定的 环境。
ZoneDelegate
对父区域的一个适应性视图。
ZoneSpecification
一个参数对象,用于Zone.fork的定制区域函数处理器。

扩展

FutureExtensions on Future<T>
在futures上提供便利方法。
FutureIterable on Iterable<Future<T>>
FutureRecord2 on (Future<T1>, Future<T2>)
对记录的future的并行操作。
FutureRecord3 在 (Future<T1>, Future<T2>, Future<T3>) 上
对记录的future的并行操作。
FutureRecord4 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>) 上
对记录的future的并行操作。
FutureRecord5 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>) 上
对记录的future的并行操作。
FutureRecord6 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>) 上
对记录的future的并行操作。
FutureRecord7 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>, Future<T7>) 上
对记录的future的并行操作。
FutureRecord8 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>, Future<T7>, Future<T8>) 时触发
对记录的future的并行操作。
FutureRecord9 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>, Future<T7>, Future<T8>, Future<T9>) 时触发
对记录的future的并行操作。

函数

runZoned<R>(R body(), {Map<Object?, Object?>? zoneValues, ZoneSpecification? zoneSpecification, Function? onError}) → R
在自身的区域中运行 body
runZonedGuarded<R>(R body(), void onError(Object error, StackTrace stack), {Map<Object?, Object?>? zoneValues, ZoneSpecification? zoneSpecification}) → R?
在其自己的错误区域内运行 body
scheduleMicrotask(void callback()) → void
异步运行一个函数。
unawaited(Future<void>? future) → void
显式忽略一个未来。

类型定义

ControllerCallback = void Function()
流控制器 onListenonPauseonResume 回调的类型。
ControllerCancelCallback = FutureOr<void> Function()
流控制器 onCancel 回调的类型。
CreatePeriodicTimerHandler = Timer Function(Zone self, ZoneDelegate parent, Zone zone, Duration period, void f(Timer timer))
自定义 Zone.createPeriodicTimer 实现函数的类型。
CreateTimerHandler = Timer Function(Zone self, ZoneDelegate parent, Zone zone, Duration duration, void f())
自定义 Zone.createTimer 实现函数的类型。
ErrorCallbackHandler = AsyncError? Function(Zone self, ZoneDelegate parent, Zone zone, Object error, StackTrace? stackTrace)
自定义 Zone.errorCallback 实现函数的类型。
ForkHandler = Zone Function(Zone self, ZoneDelegate parent, Zone zone, ZoneSpecification? specification, Map<Object?, Object?>? zoneValues)
自定义 Zone.fork 实现函数的类型。
HandleUncaughtErrorHandler = void Function(Zone self, ZoneDelegate parent, Zone zone, Object error, StackTrace stackTrace)
自定义 Zone.handleUncaughtError 实现函数的类型。
PrintHandler = void Function(Zone self, ZoneDelegate parent, Zone zone, String line)
自定义 Zone.print 实现函数的类型。
注册二进制回调处理程序 = ZoneBinaryCallback<R, T1, T2> Function<R, T1, T2>(Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2))
自定义 Zone.registerBinaryCallback 实现函数的类型。
注册回调处理程序 = ZoneCallback<R> Function<R>(Zone self, ZoneDelegate parent, Zone zone, R f())
自定义 Zone.registerCallback 实现函数的类型。
注册一元回调处理程序 = ZoneUnaryCallback<R, T> Function<R, T>(Zone self, ZoneDelegate parent, Zone zone, R f(T arg))
自定义 Zone.registerUnaryCallback 实现函数的类型。
运行二进制处理程序 = R Function<R, T1, T2>(Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2)
自定义 Zone.runBinary 实现函数的类型。
RunHandler = R 函数<R>(Zone self, ZoneDelegate parent, Zone zone, R f())
自定义 Zone.run 实现函数的类型。
RunUnaryHandler = R 函数<R, T>(Zone self, ZoneDelegate parent, Zone zone, R f(T arg), T arg)
自定义 Zone.runUnary 实现函数的类型。
ScheduleMicrotaskHandler = void 函数(Zone self, ZoneDelegate parent, Zone zone, void f())
自定义 Zone.scheduleMicrotask 实现函数的类型。
ZoneBinaryCallback<R, T1, T2> = R 函数(T1, T2)
ZoneCallback<R> = R 函数()
ZoneUnaryCallback<R, T> = R 函数(T)

异常 / 错误

AsyncError
包含错误和堆栈跟踪。
DeferredLoadException
当延迟库失败加载时抛出。
ParallelWaitError<V, E>
在外部等待多个未来时,当一些有错误时抛出。
TimeoutException
在等待异步结果时,定时超时发生时抛出。