Dart2基础(十)-异步

Dart库中的大多数函数都返回了Future和Stream对象。这些函数都是异步的,它们在设置一个可能耗时的操作(比如I/O)之后返回,而无需等待操作完成。

实现异步的关键字是: async和await。

  • 异步函数

使用async来声明一个异步函数,异步函数都会返回一个Future对象。

如果没有返回任何内容,可以声明为Future

异步函数在调用时,会立即返回,不会等程序体执行完毕。

Future lookUpVersion() async => '1.0.0';
  • Futrue

如果你需要一个Future对象,需要满足下面两点:

1. 使用async和await;

2. 调用Future的API。

await必须在async声明的函数体中使用,使用方式: await

expression通常是一个Future对象,如果不是,会自动包装成一个Future对象

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

await可以使用try,catch,finally来处理异常和清理代码

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

 await可以使用多次

var entrypoint = await findEntrypoint();
var exitCode = await runExecutable(entrypoint, args);
await flushThenExit(exitCode);
  • Stream

如果你想从一个Stream中获取值,你需要满足下面两个条件:

1. 使用async和一个异步循环(await for);

2. 使用Stream的API。

// expression必须是一个Stream对象
await for (varOrType identifier in expression) {
  // Executes each time the stream emits a value.
}

异步循环执行流程:

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

在异步循环中,break和continue还是有效的。

你可能感兴趣的:(dart2,教程)