Dart 异步操作

异步(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函数中,规则同样实用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值