在一些场景下,我们希望先执行时间队列的代码,再执行微任务队列的代码。
编写下列代码:
void main(List<String> args) {
print('任务1');
Future(
() => print('任务2')
).then(
(value) => print('任务3')
);
Future(() => print('任务4'));
print('任务5');
}
在执行之前,请先推断一下任务的执行顺序。
运行上面的代码,我们会得到下面的结果:
Connecting to VM Service at ws://127.0.0.1:52241/eM7dZHmr1EQ=/ws
任务1
任务5
任务2
任务3
任务4
Exited.
在这段代码中,任务1
和 任务5
会放到微任务队列中,首先被依次执行。
两个 Future
封装的 任务2
和 任务4
,会放到微任务队列中,在 任务1
和 任务5
执行完毕后,依次执行 任务2
和 任务4
.
那么,任务3
呢? 任务3
是同步执行的代码。关键字 then
确保在 任务2
执行完毕后,再执行 任务3
. 又因为 任务3
是同步代码,要先于事件队列中的代码执行,因此,在执行完任务2
后,先执行 任务3
,再执行 任务4
.