Flutter中如何实现多异步请求并行执行?TTS API调用并行失效问题
问题原因
你用的Future.forEach本身就是串行执行的——它会先等待当前循环里的await _fetchAudioForText完成,才会进入下一轮循环调用下一个请求,所以根本没法实现并行。
解决方案
要实现并行,得先把所有请求的Future实例创建出来(这一步会立刻启动所有API请求),再用Future.wait()等待所有请求完成。
修改后的代码如下:
// 1. 创建所有请求的Future列表,此时所有TTS请求会立刻并行启动 final futures = rounds.map((round) => _fetchAudioForText(round, voiceA)).toList(); // 2. 等待所有并行请求完成 await Future.wait(futures); // 3. 计算总字节数 totalBytes = rounds.fold(0, (sum, round) => sum + (round.audio?.lengthInBytes ?? 0));
原_fetchAudioForText方法无需修改,因为它本身是返回Future的异步方法,调用它但不立刻await时,请求就会马上发起。
额外说明
Future.wait()会等待所有Future都完成后才继续执行,还能获取所有请求的返回结果(如果需要的话)- 如果API有限流限制,可考虑分批次并行处理;若API允许,全量并行能最大化缩短总耗时
内容的提问来源于stack exchange,提问作者Bence
相关产品推荐
相关产品推荐

