这篇文章主要探讨了 Flutter/Dart 的异步机制,包括事件循环的原理、微任务与事件的区别、Future 的本质和使用,通过多种底层代码示例揭示异步机制的套路,如在不同事件中的应用。还重新认识了事件循环,指出处理事件中调度的微任务会在本次调用最后运行。最后作者分享写作目的并欢迎交流讨论。
关联问题:Dart异步如何优化Future回调怎么用Isolate通信怎实现
前言
在我的上一篇文章《深入理解Flutter/Dart事件机制》里介绍了Flutter/Dart事件机制的底层原理,相信大家读完以后会对Flutter/Dart事件机制有一个比较深入的了解。这篇文章呢,就是在前一篇文章的基础之上,跟大家一起对Dart异步机制的本质做一些探讨。
再谈事件循环
首先呢,还是上这张已经包浆的事件循环示意图:
这张图是对事件循环模型的一个抽象,在另一篇文章《Flutter/Dart中的异步》里我曾经对这张图片做了一些介绍,我们都知道循环里存在两个队列,循环的过程是程序开始先执行main函数,main函数执行完毕以后,清空微任务队列,然后再处理一个event。如此循环直到程序退出。
那么事件队列里面放着什么?微任务队列里面又放着什么呢?我们之前的了解可能会说事件队列里放着外部事件,例如定时器事件,IO事件等等,微任务队列放着微任务,调用scheduleMicrotask函数就可以给微任务队列添加微任务。