Dart之异步编程

异步是什么?

Dart 代码运行在单个执行“线程”中。如果 Dart 代码在执行时阻塞,例如:处理一个需要长时间运行的计算操作或等待 I/O 完成。此时整个程序会被“冻结”。

异步操作可以让你的程序在等待一个操作完成时继续处理其它的工作。

Dart 使用 Future 对象来表示异步操作的结果。

你可以用 async 和 await 关键字或 Future 类的相关 API 来配合使用 future。

Future

future 是 Future<T> 类的对象,其表示一个 T 类型的异步操作结果。如果异步操作不需要结果,则 future 的类型可为 Future<void>。当一个返回 future 对象的函数被调用时,会发生两件事

  1. 将函数操作列入队列等待执行并返回一个未完成的 Future 对象。

  2. 不久后当函数操作执行完成,Future 对象变为完成并携带一个值或一个错误。

Future.value()

创建一个返回指定value值的Future。

void main(){
  yibu();
  print("yibu()执行之后打印");
}

Future<void> yibu() async {
  var result = await Future.value(1);
  print("future value :${result}");
}

 

Future.delayed()

创建一个延迟执行的Future

void main() {
  yibu();
  delayYibu();
  print("yibu()执行之后打印");
}


void delayYibu() {
  Future.delayed(const Duration(seconds: 2), () {
    print("Future.delayed 2 seconds.");
  });
}

 

处理Future的结果

Future的所有API的返回值仍然是一个Future对象,所以可以很方便的进行链式调用。

Future.then()

用来注册一个Future完成时要调用的回调。如果 Future 有多个then,它们也会按照链接的先后顺序同步执行,同时也会共用一个event loop。

// then:Future完成时要调用的回调
void thenYibu(){

  Future.value(1).then((value) async {
    var result = await Future.value(value+2);
    print("then value:${result}");
    return result;
  }).then((value) async {
    var result = await Future.value(value+2);
    print("then value:${result}");
    return result;
  });
}

Future.catchError回调只处理原始Future抛出的错误,不能处理回调函数抛出的错误,then中onError只能处理当前Future的错误: 

Future.whenComplete

Future.whenComplete 在Future完成之后总是会调用,不管是错误导致的完成还是正常执行完毕。

async 和 await

当你写的代码依赖flutter对象时,可以使用关键字 async 和 await 关键字

异步函数 即在函数头中包含关键字 async 的函数。关键字 await 只能用在异步函数中。

错误处理

如果一个 Future 在函数返回完成时有错误,你可能想要捕获该错误。异步函数中可以使用 try-catch 语句来处理错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值