Dart代码中Future执行输出顺序是否100%固定不会出现反转?
你的理解完全正确,这段代码的输出顺序100%不会反转,规则依据如下:
- Dart的每个Isolate都是单线程运行,不存在抢占式调度,所有代码的执行顺序完全由事件循环的固定规则决定。
- 事件循环的执行优先级固定为:先跑完当前正在执行的所有同步代码 → 按顺序清空微任务队列 → 再按顺序处理事件队列中的任务。
- 你代码中使用的
Future(() {})默认构造函数,会直接把传入的函数作为事件添加到事件队列的末尾,不会立刻执行。 - main函数本身属于当前正在执行的同步任务,所以main函数内的
print("Exiting main now")会先同步执行完成,等整个main函数执行结束后,事件循环才会去处理事件队列里的Future任务,所以必然是先打印Exiting main now,再打印Executing Future。
你提到的顺序反转的情况,只有主动修改Future的调度方式才会出现,比如使用Future.microtask()把任务放到微任务队列,或者使用同步的Future.value()之类的构造,你当前写的这段代码输出顺序是完全固定的。
内容的提问来源于stack exchange,提问作者Priyshrm
相关产品推荐
相关产品推荐

