处理 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);
  }
  // ...
}生成器
                
                










