看了很多网上的例子,很简单的东西但是有人把它写的超级复杂。。。。。所以记录一下
async:标记某个方法为异步方法(耗时方法),在声明方法的时候使用
await:等待某个异步方法<执行完毕>。是“等待”,所以要在调用耗时方法的时候使用
void main(){
fun1();
fun2();//没有await 虽然耗时 但是不需要等待
fun3();
fun4();
}
void fun1(){
print('fun1');
}
void fun2() async{ //声明耗时方法 使用async
print('fun 2 pre');
await Future.delayed(Duration(seconds: 2)); //调用耗时方法,使用await
print('fun 2 after');
}
void fun3(){
print('fun3');
}
void fun4() async{
Future.delayed(Duration(seconds: 5));
print('fun4');
}
1.首先执行fun1()
2.执行fun2(),输出fun2 pre
这里fun2()没有继续执行,要等待await Future.delayed(Duration(seconds: 2));
执行完毕
或者说fun2()内部阻塞在这里
fun2()没有用-await-修饰,所以不需要等待,main方法继续走
3.执行fun3()
4.执行fun4(),开始执行Future.delayed
fun4内部的Future.delay也是一个耗时方法,但是没有用await修饰,所以不等待,直接输出fun4
注意和fun2的区别
等两秒(也就是await Future.delayed(Duration(seconds: 2))
)执行完,输出fun 2 after
fun2执行完毕
继续等3秒,fun4内部的Future.delayed(Duration(seconds: 5))
执行完
fun4完
整个main方法执行完,退出
fun1
fun 2 pre
fun3
fun4
//等两秒
fun 2 after
//再等3秒
Process finished with exit code 0
还不明白的可以在fun2前面加个await再试一下