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在微任務隊列中,優先執行,打印s1,s8
3.new Future中的微隊列優先級雖然高,但是其屬於Future中的微隊列需要將Future處理了再處理微隊列中的消息,因此打印是s3,s4,後面的then是new Future中的一部分因此之後也會執行s6,後面執行s5,後面再打印s7,最後打印延時的s2