Dart单线程核心包括:主线程、微任务和宏任务
微任务队列:包含微任务,主要通过scheduleMicrotask来调度
事件队列:事件队列包括外部事件,例如I/O,Timer、绘制事件等
例子:
void main() {
print('flow start');
Timer.run(() {
print('event-A');
scheduleMicrotask(() {
print('microtask-B in event-A');
});
scheduleMicrotask(() {
print('microtask-C in event-A');
});
});
scheduleMicrotask(() {
print('microtask-A');
Timer.run(() {
print('event-B in microtask-A');
});
});
print('flow end');
}
输出结果:
flow start
flow end
microtask-A
event-A
microtask-B in event-A
microtask-C in event-A
event-B in microtask-A
总结:dart会有一个调用栈,一个事件队列,一个微任务队列 从main函数开始,首先执行同步任务,如果异步事件就会加入事件队列,先不执行等待轮询,如果如果微任务就加入微任务队列,先不执行等待轮询。main函数执行完毕,开始轮询,首先看微任务队列里有没有任务,如果有就执行微任务,直到执行完队列里所有微任务,然后执行事件队列里的任务,以此循环
参考: