Dart语言Future、async、await异步(十)

像其他程序语言一样,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 f1 = new Future(method1);//此时f1就是未来的结果
    // 未来的结果获取,使用then
    f1.then((String value) {
      print("value1=$value");
    });

使用Future,等待多个异步方法执行完成,并根据结果集,执行特定操作:

Future method5() async {
    return "5";
  }

  Future method6() async {
    return "6";
  }

  Future method7() async {
    return "7";
  }

void testE() {
    Future.wait([method5(), method6(), method7()]).then((List responses) {
      print(responses);
    }).catchError((e) {
      print(e);
    });
  }

使用Future,等待多个异步方法执行完成,并按特定顺序执行(例子中,需要按顺序执行求和):

Future method8() async {
    return 8;
  }

  Future method9(int p) async {
    return p+9;
  }

  Future 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");
    });
  }

你可能感兴趣的:(flutter学习,flutter)