這篇文章主要探討了 Flutter/Dart 的異步機(jī)制,包括事件循環(huán)的原理、微任務(wù)與事件的區(qū)別、Future 的本質(zhì)和使用,通過多種底層代碼示例揭示異步機(jī)制的套路,如在不同事件中的應(yīng)用。還重新認(rèn)識了事件循環(huán),指出處理事件中調(diào)度的微任務(wù)會在本次調(diào)用最后運(yùn)行。最后作者分享寫作目的并歡迎交流討論。
關(guān)聯(lián)問題:Dart異步如何優(yōu)化Future回調(diào)怎么用Isolate通信怎實現(xiàn)
前言
在我的上一篇文章《深入理解Flutter/Dart事件機(jī)制》里介紹了Flutter/Dart事件機(jī)制的底層原理,相信大家讀完以后會對Flutter/Dart事件機(jī)制有一個比較深入的了解。這篇文章呢,就是在前一篇文章的基礎(chǔ)之上,跟大家一起對Dart異步機(jī)制的本質(zhì)做一些探討。
再談事件循環(huán)
首先呢,還是上這張已經(jīng)包漿的事件循環(huán)示意圖:?
這張圖是對事件循環(huán)模型的一個抽象,在另一篇文章《Flutter/Dart中的異步》里我曾經(jīng)對這張圖片做了一些介紹,我們都知道循環(huán)里存在兩個隊列,循環(huán)的過程是程序開始先執(zhí)行main函數(shù),main函數(shù)執(zhí)行完畢以后,清空微任務(wù)隊列,然后再處理一個event。如此循環(huán)直到程序退出。
那么事件隊列里面放著什么?微任務(wù)隊列里面又放著什么呢?我們之前的了解可能會說事件隊列里放著外部事件,例如定時器事件,IO事件等等,微任務(wù)隊列放著微任務(wù),調(diào)用scheduleMicrotask函數(shù)就可以給微任務(wù)隊列添加微任務(wù)。