Dart并发编程01-向事件队列添加任务

40 阅读1分钟

把一块代码放到 Future 中去执行时,Dart 会把这一代码块放到事件队列中等待处理,而不是马上执行这一块代码。

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

这里,我们向 Future 的构造函数传入了一个匿名函数,Future 会把这个匿名函数放到事件队列中。

运行上面的代码,我们会得到下面的结果,注意三个任务的输出顺序:

Connecting to VM Service at ws://127.0.0.1:50574/nSAebAcTCto=/ws
任务1
任务3
任务2

Exited.

Dart 首先执行同步代码 任务1。在遇到 Future 时,Dart 会把 任务2 放到事件队列中,而不是马上执行。然后,Dart 继续执行同步代码 任务3。最后,Dart 发现所有同步代码都执行完毕了,就从事件队列中取出 任务2 执行,这也是其最后输出的原因。