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
相关产品推荐
相关产品推荐

