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