Dart语言入门学习-异步支持(七)

处理 Future

使用 async 和 await 关键字的代码是异步的。要使用 await,代码必须在异步函数(使用 async 标记的函数)中,await表示等待异步函数的执行结果。

Future checkVersion() async {
  var version = await lookUpVersion();
  // Do something with version
}

在 await 表达式中, 表达式的值通常是一个 Future 对象; 如果不是会被自动包装成一个 Future 对象。await 表达式 执行的结果为这个返回的对象。 await 表达式会阻塞代码的执行,直到需要的对象返回为止。这个和java的Future很像,有await标记的函数在调用的时候,调用函数必须要有async

声明异步函数

比如下面的一段代码,获取版本号

String lookUpVersion() => '1.0.0';

如果实现非常耗时,将其更改为异步函数,返回值是 Future 。

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

注意,函数体不需要使用Future API。 如有必要, Dart 会创建 Future 对象。
如果函数没有返回有效值, 需要设置其返回类型为 Future 。

处理 Stream

await for (varOrType identifier in expression) {
  // Executes each time the stream emits a value.
}

上面 表达式 返回的值必须是 Stream 类型。 执行流程如下:
1,等待,直到流发出一个值。
2,执行 for 循环体,将变量设置为该发出的值
3,重复1和2,直到关闭流。
break和return 语句可以停止接收 stream 的数据

Future main() async {
  // ...
  await for (var request in requestServer) {
    handleRequest(request);
  }
  // ...
}

生成器

posted @ 2019-05-20 18:27  数据结构和算法  阅读(49)  评论(0编辑  收藏  举报