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

Dart中Future.wait支持的任务列表最大长度限制是多少

问题解答

Future.wait本身不存在固定的传入任务列表最大长度限制,你遇到的报错和Future.wait的列表容量无关,是操作系统层面的资源限制导致的。

报错根因

  • 你当前的代码写法中,_list.map((e) => e.requestInterface())执行时会立刻触发所有遍历到的请求逻辑,所有网络请求会在短时间内全部并发启动,不会按顺序排队执行。
  • 每个网络请求底层都会创建系统套接字(Socket),套接字和本地打开的文件一样,会占用进程的文件描述符配额。操作系统对单进程可持有的文件描述符数量有默认上限,移动端系统默认阈值通常在1024左右,部分定制系统可能更低。
  • 当一次性发起的并发请求数量超过当前进程的文件描述符上限时,新的套接字无法创建,就会抛出SocketException: Connection Failed (OS Error: Too many open files, errno = 24)错误。

你限制并发请求数量后,同一时间占用的文件描述符始终低于系统阈值,请求可以分批正常执行,程序自然恢复正常。

可参考的并发控制实现

你可以通过分片批量执行的方式控制最大并发数,避免一次性打满系统资源,示例代码如下:

resultList = [];
// 可根据实际场景调整最大并发数,客户端场景建议设置在5~15区间
const int maxConcurrentCount = 10;
for (var i = 0; i < _list.length; i += maxConcurrentCount) {
  final batchEnd = (i + maxConcurrentCount > _list.length) 
      ? _list.length 
      : i + maxConcurrentCount;
  final batchTask = _list.sublist(i, batchEnd);
  final batchResult = await Future.wait(
    batchTask.map((e) => e.requestInterface())
  );
  resultList.addAll(batchResult);
}

注意:过高的并发数除了触发系统文件描述符限制,还可能占满设备带宽、触发服务端接口限流,不建议无限制提升并发数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:20:04