Dart 异步操作
程序员文章站
2022-05-01 23:05:48
...
异步(Asynchrony support)
Dart 语言是目前少数几个支持异步操作的语言。
一般使用async函数和await表达式实现异步操作。
Dart 库提供asynchronous的功能。该功能提供接口来进行耗费时间的操作,二调用的主代码不用等待耗时操作执行完成后才进行操作。该功能返回Future或Stream对象。
代码使用了async或await就是异步处理,虽然代码看起来像是同步处理的。
checkVersion() async {
var version = await lookUpVersion();
if (version == expectedVersion) {
// Do something.
} else {
// Do something else.
}
}
await表达式可以与try,catch和finally语句搭配在一起使用。
try {
server = await HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 4044);
} catch (e) {
// React to inability to bind to the port...
}
声明异步功能(Declaring async functions)
一个异步函数必须是一个被async修饰符标记的函数。
虽然异步的函数中可能执行耗时的操作,但是函数本身在调用后将会立即返回,即使函数体一条语句也没执行。
给函数添加async修饰符将使函数返回一个Future类型。
修改前的代码:
String lookUpVersionSync() => '1.0.0';
修改后的代码:
Future<String> lookUpVersion() async => '1.0.0';
在Future 中使用await 表达式
await表达式的格式:
await expression
在异步的代码里可以多次使用await 表达式。
var entrypoint = await findEntrypoint();
var exitCode = await runExecutable(entrypoint, args);
await flushThenExit(exitCode);
在await表达式中,表达式通常是一个Future。如果表达式不是Future 类型,它将自动被包装为Future类型。
Future类型表明了回传值的的类型是是一个对象。
如果await不工作,请确认await处于async函数中。即使是在main函数中,规则同样实用。
上一篇: Statement的安全问题
下一篇: FALSE