Dart并发编程02-向微任务队列添加任务

47 阅读1分钟

向微任务队列添加任务与向事件队列添加任务一样简单。

void main(List<String> args) {
  print('任务1');
  Future(
   () => print('任务2'),
  );
  Future.microtask(
   () => print('任务3'),
  );
  print('任务4');
}

这里,我们使用 Futuremicrotask 方法向微任务队列添加了 任务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 会处理的非常好,不需要我们手动管理,除非在一些编写底层代码的场景中。