dart:async

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

FutureStream 是 Dart 中异步编程的基本构建块。它们通过 asyncasync* 函数直接在语言中得到支持,并且通过 dart:core 库对所有库都是可用的。

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

在您的代码中使用此库

import 'dart:async';

Future

Future 对象表示一个可能在未来的某个时间点返回值的计算。Future 在未来某个时间点完成时返回计算的值。Future 经常用于实现在不同线程或 isolate 中的 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>
一个同步交付其事件的流控制器。
定时器
一个可以配置为一次性或重复触发的倒计时定时器。
区域
区域代表一个在异步调用中保持稳定的 环境。
区域代表
父区域的修改视图。
区域规范
一个参数对象,包含为 Zone.fork 定制的区域函数处理器。

扩展

FutureExtensionsFuture<T>
对未来的便利方法。
FutureIterableIterable<Future<T>>
FutureRecord2 在 (Future<T1>, Future<T2>)
在未来的记录上执行并行操作。
FutureRecord3 在 (Future<T1>, Future<T2>, Future<T3>)
在未来的记录上执行并行操作。
FutureRecord4 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>)
在未来的记录上执行并行操作。
FutureRecord5 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>)
在未来的记录上执行并行操作。
FutureRecord6 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>)
在未来的记录上执行并行操作。
FutureRecord7 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>, Future<T7>)
在未来的记录上执行并行操作。
FutureRecord8 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>, Future<T7>, Future<T8>)
在未来的记录上执行并行操作。
FutureRecord9 在 (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>, Future<T7>, Future<T8>, Future<T9>)
在未来的记录上执行并行操作。

函数

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
显式忽略一个Future。

类型定义

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实现函数的类型。
RegisterBinaryCallbackHandler = ZoneBinaryCallback<R, T1, T2> Function<R, T1, T2>(Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2))
自定义Zone.registerBinaryCallback实现函数的类型。
RegisterCallbackHandler = ZoneCallback<R> Function<R>(Zone self, ZoneDelegate parent, Zone zone, R f())
自定义Zone.registerCallback实现函数的类型。
RegisterUnaryCallbackHandler = ZoneUnaryCallback<R, T> Function<R, T>(Zone self, ZoneDelegate parent, Zone zone, R f(T arg))
自定义Zone.registerUnaryCallback实现函数的类型。
RunBinaryHandler = 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 Function<R>(Zone self, ZoneDelegate parent, Zone zone, R f())
自定义Zone.run实现函数的类型。
RunUnaryHandler = R Function<R, T>(Zone self, ZoneDelegate parent, Zone zone, R f(T arg), T arg)
自定义 Zone.runUnary 实现函数的类型。
ScheduleMicrotaskHandler = void Function(Zone self, ZoneDelegate parent, Zone zone, void f())
自定义 Zone.scheduleMicrotask 实现函数的类型。
ZoneBinaryCallback<R, T1, T2> = R Function(T1, T2)
ZoneCallback<R> = R Function()
ZoneUnaryCallback<R, T> = R Function(T)

异常 / 错误

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