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

本文介绍了Dart编程语言中的异步处理机制,包括使用async和await关键字来处理异步操作,以及如何通过Future来管理多个异步任务。当执行耗时操作如大文件加载或网络下载时,避免阻塞主线程,可以利用异步编程实现。示例展示了如何在Dart中顺序执行、并行执行以及按顺序执行异步方法,并提供了相关代码片段。
摘要由CSDN通过智能技术生成

像其他程序语言一样,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");
    });
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值