Dart基础7-异步

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dart基础7-异步相关的知识,希望对你有一定的参考价值。

参考技术A

java中用thread来支持异步操作,而dart中用的是Future

基础使用

我们在Future中使用延迟操作并不影响main线程的其他方法执行,并不会阻塞线程

打印结果为:

await关键字,会先执行函数,然后返回一个Future对象
await必须在async修饰的函数中才能使用
如果函数没有返回一个有用的值,那么将其返回Future<void>类型

打印结果

whenComplete和then区别

这里会建立2个队列,Microtask队列和event队列,Microtask优先于event队列,当Microtask全部执行完后才会执行event

打印顺序是:

在s1之后的then又创建了一个Future,Future需要当前Zone的Future全部执行完,才会执行下一个。而s3需要在s2执行完毕后才执行,因为需要等待s2那步返回的参数
如果将第一个改为:

打印结果

内部其实使用的是一个定时任务

我们做一个测试:

接着分析一下then:

并未做什么处理,直接追踪 _thenNoZoneRegistration

找到了一个增加监听器的方法,进入查看

一大段处理后,最终来到scheduleMicrotask方法

内部其实还是使用的scheduleMicrotask,创建一个Microtask队列

到此,我们来模拟一下:

也简单的实现了then的效果

为了保持你app的可响应性,大计算量的任务放入额外的isolate中

官方使用例子:

当需要延迟地生成一个值序列时,请考虑使用生成器函数

递归生成器使用方法是一样的

详细可参见: https://webdev.dartlang.org/articles/performance/event-loop

以上是关于Dart基础7-异步的主要内容,如果未能解决你的问题,请参考以下文章

dart基础语法

dart基础语法

dart基础语法

Dart 异步编程之 Isolate 和事件循环

dart基础语法

dart基础语法