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

猜你喜欢

转载自blog.csdn.net/augfun/article/details/106892345