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

Dart循环内部为异步逻辑时如何实现外部逻辑同步执行?

问题根因
  • 原代码中List.forEach不支持等待异步回调执行完成:forEach方法的返回值是void,即使传入的回调是async函数,外层的async函数也无法感知到内部的异步任务状态,所以不会等待所有回调执行完成就会继续运行后续代码。
  • pS函数没有返回内部创建的Future.delayed实例:导致await pS(element)实际等待的是一个已经完成的空Future,没有起到等待延迟任务的作用。
  • main函数中调用gogo时没有加await:async函数如果不被await,调用方不会等待其内部逻辑执行完成。
修改方案

方案1:并发执行异步任务(总耗时约1秒,4个值同时输出)

void main() async {
  List<String> list = ['1', '2', '3', '4'];
  // 等待gogo函数执行完成
  await gogo(list);
  print('main end');
}

Future<void> gogo(List list) async {
  // 用Future.wait批量等待所有异步任务执行完成
  await Future.wait(list.map((element) => pS(element)));
  print('gogo end');
}

Future pS(String s) async {
  // 显式返回Future实例
  return Future.delayed(Duration(seconds: 1), () {
    print(s);
  });
}

方案2:串行执行异步任务(总耗时约4秒,按顺序每秒输出一个值)

如果需要严格保证1、2、3、4的输出顺序,可以替换gogo的实现为常规for循环:

Future<void> gogo(List list) async {
  for (var element in list) {
    await pS(element);
  }
  print('gogo end');
}

两种方案最终输出都符合预期要求。

内容的提问来源于stack exchange,提问作者Zhuoyuan.Li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:45:03