Dart15.異步-scheduleMicrotask()

ex:

import 'dart:async';
void main(){
  testScheduleMicrotask();
}
void testScheduleMicrotask(){
  scheduleMicrotask(() => print('s1'));//微任務

  new Future.delayed(new Duration(seconds: 1), () => print('s2'));//延遲執行

  new Future(() => print('s3'))
      .then((_) {print('s4');scheduleMicrotask(() => print('s5'));})
      .then((_) => print('s6'));

  new Future(() => print('s7'));

  scheduleMicrotask(() => print('s8'));//微任務

  print('s9');
}

打印如下:

D:\flutter\bin\cache\dart-sdk\bin\dart.exe --enable-asserts --enable-vm-service:43056 D:\Code\Flutter\FlutterHello\flutter_app\lib\loop2.dart
lib/loop2.dart: Warning: Interpreting this as package URI, 'package:flutterapp/loop2.dart'.
Observatory listening on http://127.0.0.1:43056/M_-nfYmRckg=/

s9
s1
s8
s3
s4
s6
s5
s7
s2

Process finished with exit code 0

事件執行的順序如下:

1.先執行main中的代碼,再執行事件隊列中的代碼print('s9'),也就是先打印s9

2.s1和s8在微任務隊列中,優先執行,打印s1s8

3.new Future中的微隊列優先級雖然高,但是其屬於Future中的微隊列需要將Future處理了再處理微隊列中的消息,因此打印是s3s4,後面的then是new Future中的一部分因此之後也會執行s6,後面執行s5,後面再打印s7,最後打印延時的s2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章