You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter/Dart实现同步执行:解决异步方法调用顺序问题

解决Dart异步方法调用的顺序执行问题

这是个很常见的Dart异步编程小坑,我来帮你拆解一下原因和解决办法:

问题原因

你遇到的交叉输出,本质是因为write是异步方法(带有async关键字)。当你在main里连续调用两次write(list)时,第一个write执行到await Future.delayed时会暂时让出执行权,Dart的事件循环会立刻启动第二个write的执行,导致两个循环的打印操作交替进行,最终出现了交叉的输出结果。

解决方案

要让两次write调用顺序执行,关键是等待第一个异步任务完全完成后,再启动第二个任务。只需要把main方法改成异步的,并用await关键字等待每次write的执行:

修改后的完整代码:

void main() async {
  List<int> list = [1, 2, 3, 4];
  // 等待第一个write执行完毕
  await write(list);
  // 第一个完成后,再执行第二个write
  await write(list);
}

write(List<int> values) async {
  for (int value in values) {
    await Future.delayed(Duration(microseconds: 1));
    print(value);
  }
}

验证效果

这样修改后,第一个write会按顺序打印1→2→3→4,等它完全执行结束后,第二个write才会开始执行,最终输出就和你期望的一致了:

I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4
I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4

内容的提问来源于stack exchange,提问作者Jitesh Mohite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:12:50