Dart语言中的async和await

async 和 await

开始说这两个关键字之前我觉得有必要提一下:在Dart中没有子线程一说,所有代码都是在一条主线上运行的,所以需要用异步来实现一些耗时操作。(如果非要开启多线程需要使用隔离,这里不做叙述)

来说一下这两个关键字吧,async用来修饰方法,需要写在方法括号的后面,await写在方法里面,这里要注意:await关键字必须在async函数内部使用,不然会报错。await表达式可以使用多次。这里其实很好理解:都不是异步方法了你还等待啥啊?下面看一个简单的样例吧:

void main() {
  getName1();
  getName2();
  getName3();
}

getName1() async {
  await getStr1();
  await getStr2();
  print('getName1');
}

getStr1() {
  print('getStr1');
}

getStr2() {
  print('getStr2');
}

getName2() {
  print('getName2');
}

getName3() {
  print('getName3');
}

上面这段代码并不长,大家可以猜一下打印出来的值。

首先执行getName1(),执行的时候发现这个方法是async的方法,继续执行,执行到方法中第一行的时候,发现调用了一个getStr1()方法,而且这个方法使用了await来修饰,表示需要等待执行

重点来了:当遇到await的时候会执行完这一行,打印出了getStr1,之后立即返回一个Future(void)对象(上面的代码中省略了这个,写代码时推荐加上,方便代码阅读理解),然后将这个方法中剩余的代码放入了事件队列,接着往下执行getName2()和getName3(),分别打印出了getName2和getName3

刚才也说过,在Dart中只有一个main线程一桶到底,还有一个事件队列,现在main线程中都已经执行完毕,但是事件队列中还有东西,继续执行getStr2(),执行的时候发现还是await,再进行等待,等待执行完成后打印getStr2,最后再打印getName1。

下面是打印出的结果:

getStr1
getName2
getName3
getStr2
getName1

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值