编译环境: VSCode版本: 1.46.0 ,Dart版本: v3.11.0,Flutter版本: v3.11.0
线程 Future、async、await
Dart通常是单线程执行
String fun1(){
return '1';
}
String fun2(){
return '2';
}
String fun3(){
return '3';
}
void test1(){
print(fun1());
print(fun2());
print(fun3());
}
异步方法
- 如果是执行的网络请求、访问数据库或文件等,那么方法不会立刻返回结果,需要一定的执行时间。这时不能一直,这时情况下,可以使用Future来描述未来的结果
Future<String> fun4 = new Future(fun1); //fun4 就是未来的结果
- async与 await 将异步方法同步方法操作
- async 描述一个执行异步操作的方法
- await表示一直等待异步返回结果,才继续往后执行
Future<String> fun5() async {
return '5';
}
void test2() async {
fun1();
String f5 = await fun5(); //这里需要有返回异步的结果之后才会往后执行
print(f5);
test1();
}
- wait并行执行
同时执行了多个网络请求,等所有结果都返回后再执行操作,返回一个List的结果集
Future<String> fun6() async {
return '6';
}
Future<String> fun7() async {
return '7';
}
Future<String> fun8() async {
return '8';
}
void test3(){
Future.wait([fun6(),fun7(),fun8()]).then((List responses){
print(responses);
}).catchError((error){
print(error);
});
}
链式调用
多个网络请求,后者需要前者的返回值当做参数,最后一个才是想要的值
Future<int> fun9() async {
return 9;
}
Future<int> fun10(int p) async {
return p +10;
}
Future<int> fun11(int p) async {
return p + 11;
}
void test4(){
fun9().then((value9){
print('value9 = $value9');
return fun10(value9);
}).then((value10){
print('value10 = $value10');
return fun11(value10);
}).then((value11){
print('value11 = $value11');
});
}
main(List<String> args) {
test1(); // 1 2 3
//未来的结果获取,使用then
fun4.then((String value){
print('value1 = $value');
});
test2();
test3(); //[6,7,8]
test4();//value9 = 9 value10 = 19 value11 = 30
}