像其他程序语言一样,dart主程序也是单线程执行的。
如下的程序:
String Step1() {
return "Step1";
}
String Step2() {
return "Step2";
}
String Step3() {
return "Step3";
}
void testA() {
print(Step1());
print(Step2());
print(Step3());
}
将按顺序执行,并返回:
Step1
Step2
Step3
当我们执行大文件的加载或者从网络上执行下载的时候,如果时间过长,将会导致主程序阻塞。这可能不是我们所期望的。所以在dart中,引入了异步的概念,也就是标题中的关键字async、await。
使用await的方法必须使用async进行标记。如下示例:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// await FlutterDownloader.initialize();
// await Permission.storage.request();
if (UniversalPlatform.isAndroid) {
await AndroidInAppWebViewController.setWebContentsDebuggingEnabled(true);
}
使用Future,等待异步执行完成,并执行特定操作:
// 假设method1是网络请求
Future<String> f1 = new Future(method1);//此时f1就是未来的结果
// 未来的结果获取,使用then
f1.then((String value) {
print("value1=$value");
});
使用Future,等待多个异步方法执行完成,并根据结果集,执行特定操作:
Future<String> method5() async {
return "5";
}
Future<String> method6() async {
return "6";
}
Future<String> method7() async {
return "7";
}
void testE() {
Future.wait([method5(), method6(), method7()]).then((List responses) {
print(responses);
}).catchError((e) {
print(e);
});
}
使用Future,等待多个异步方法执行完成,并按特定顺序执行(例子中,需要按顺序执行求和):
Future<int> method8() async {
return 8;
}
Future<int> method9(int p) async {
return p+9;
}
Future<int> method10(int p) async {
return p+10;
}
void testG() {
method8().then((value8) {
print("value8=$value8");
return method9(value8);
}).then((value9) {
print("value9=$value9");
return method10(value9);
}).then((value10) {
print("value10=$value10");
});
}