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

Flutter中Future队列内任务无法全部执行完成问题排查求助

问题原因
  1. 核心问题是你的Future队列没有做异常处理:只要队列中某一个job()异步任务抛出未捕获的异常,整个链式绑定的_future就会进入失败状态,后续所有通过then绑定的任务都会直接跳过执行,导致队列永久失效。你看到的编号1之后的任务不执行,就是编号1对应的job执行时抛出了未捕获异常。
  2. 你提到的profiler相关报错和队列问题无关,是iOS端调试时的偶发系统报错,不影响业务逻辑。
解决方案

给每个任务添加异常捕获逻辑,保证单个任务失败不会中断整个队列即可,修改后的队列代码如下:

int i = 0;

class TouchlessAlarmScheduleQueue {
  Future _future = Future(() {});

  addJob(String alarmId, Future<void> Function() job) {
    print('$i added');
    int iCopy = i;
    _future = _future.then((_) async {
      print("$iCopy done");
      try {
        await job();
      } catch (e, stackTrace) {
        // 可自行打印异常信息做业务排查
        print("任务$iCopy执行出错: $e\n$stackTrace");
      }
    });
    i++;
  }
}

可选优化点

  • 如果需要区分任务执行成功/失败的回调,可以给addJob方法增加可选的成功、失败回调参数
  • 如果需要支持取消队列任务,可以额外维护一个_isCanceled标识,执行每个任务前先判断标识状态
  • 对于高频点击场景,还可以额外加防抖逻辑,避免短时间内加入大量无意义的重复任务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:04