Flutter main future mirotask 的執行順序

下面這段代碼的輸出是什麼?

import 'dart:async';
main() {
  print('main #1 of 2');
  scheduleMicrotask(() => print('microtask #1 of 2'));
 
  new Future.delayed(new Duration(seconds:1),
                     () => print('future #1 (delayed)'));
  new Future(() => print('future #2 of 3'));
  new Future(() => print('future #3 of 3'));
 
  scheduleMicrotask(() => print('microtask #2 of 2'));
 
  print('main #2 of 2');
}

 答案在下面:async

1 main #1 of 2
2 main #2 of 2
3 microtask #1 of 2
4 microtask #2 of 2
5 future #2 of 3
6 future #3 of 3
7 future #1 (delayed)

main方法中的普通代碼都是同步執行的,因此確定是main打印先所有打印出來,等main方法結束後會開始檢查microtask中是否有任務,如有則執行,執行完繼續檢查microtask,直到microtask列隊爲空。因此接着打印的應該是microtask的打印。最後會去執行event隊列(future)。因爲有一個使用的delay方法,因此它的打印應該是在最後的。

原文:https://blog.csdn.net/meiyulong518/article/details/81773365 spa

相關文章
相關標籤/搜索