欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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