Dart 学习笔记-异步支持

参考:https://www.dartcn.com/guides/language/language-tour#%E5%BC%82%E6%AD%A5%E6%94%AF%E6%8C%81

Dart 库中包含许多返回 Future 或 Stream 对象的函数. 这些函数在设置完耗时任务(例如 I/O 操作)后, 就立即返回了,不会等待耗任务完成。 使用 async 和 await关键字实现异步编程。 可以让你像编写同步代码一样实现异步操作。

处理 Future

可以通过下面两种方式,获得 Future 执行完成的结果:

  • 使用 async 和 await.
  • 使用 Future API

使用 async 和 await 关键字的代码是异步的。 虽然看起来有点想同步代码。
例如,下面的代码使用 await 等待异步函数的执行结果。

Future checkVersion() async {
  var version = await lookUpVersion();
  // 不出意外已经获取到 version
}

使用try, catch, 和 finally 来处理代码中使用 await 导致的错误。

try {
  version = await lookUpVersion();
} catch (e) {
  // React to inability to look up the version
}

声明异步函数

函数体被 async 标示符标记的函数,即是一个异步函数.
例如:

Future<String> lookUpVersion() async => '1.0.0';

处理 Stream

详细介绍可查看:Dart 语言Stream详解

当需要从 Stream 中获取数据值时, 可以通过一下两种方式:

  • 使用 async 和 一个 异步循环 (await for)。
    以下是await for循环的使用形式:
await for (varOrType identifier in expression) {
  // Executes each time the stream emits a value.
}

上面 表达式 返回的值必须是 Stream 类型。 执行流程如下:

  1. 等待,直到流发出一个值。
  2. 执行 for 循环体,将变量设置为该发出的值
  3. 重复1和2,直到关闭流。

使用 break 或者 return语句可以停止接收 stream 的数据, 这样就跳出了 for 循环, 并且从 stream 上取消注册。

  • 使用 Stream API
发布了180 篇原创文章 · 获赞 76 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/ITxiaodong/article/details/104170791