向微任务队列添加任务与向事件队列添加任务一样简单。
void main(List<String> args) {
print('任务1');
Future(
() => print('任务2'),
);
Future.microtask(
() => print('任务3'),
);
print('任务4');
}
这里,我们使用 Future
的 microtask
方法向微任务队列添加了 任务3
.
运行上面的代码,我们会得到下面的结果:
Connecting to VM Service at ws://127.0.0.1:63869/Exr_kB-CH1I=/ws
任务1
任务4
任务3
任务2
Exited.
Dart 首先执行同步代码 任务1
和 任务4
。在遇到 Future
时,Dart 会把 任务2
放到事件队列中,而不是马上执行。然后,Dart 把 任务3
放到微任务队列,也不立即执行。最后,Dart 发现所有同步代码(任务1和任务2)都执行完毕,才从微任务队列中取出 任务3
执行,接着从事件队列取出 任务2
执行,这也是 任务3
先于 任务2
输出的原因。
警告
虽然我们可以向微任务队列添加任务,但是大多数情况下,Dart 会处理的非常好,不需要我们手动管理,除非在一些编写底层代码的场景中。