把一块代码放到 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
执行,这也是其最后输出的原因。