首页 > 解决方案 > 未处理的异常:迭代期间的并发修改:“_GrowableList”的实例(长度:1)

问题描述

我将全局变量jobModelList声明为:

late List<JobModel> jobModelList = <JobModel>[];

我有获取数据并填充jobModelList数据的 http 处理程序。

main() async {

  scanParserProcesses();

   app.get('/get-jobs-status', (req, res) async {
     print("get-jobs-status");
    var result = jobModelList.map((e) => e.toJson()).toList();
     res.json({'data': result});
   });

   app.post('/update-jobs-status', (req, res) async { 
       print("update-jobs-status");
       JobModel job = JobModel.fromJson(req.body);
       jobModelList.removeWhere((element) => element.jobPid == job.jobPid);
       jobModelList.removeWhere((element) => element.jobNumbers.toString() == job.jobNumbers.toString());
       jobModelList.add(job);
       res.json({'data': 'Parser status updated'});
   });

我需要定期扫描模型并删除悬挂过程。

scanParserProcesses() {
  Timer.periodic(Duration(seconds:5), (Timer t) async {    
    for(var job in jobModelList) {
        if(job.lastPingDate!.isBefore(DateTime.now().subtract(Duration(minutes: 5))) ) {
          job.parserStatus = ParserStatus.idle; 
          if(job.isMiddlewareAlive ?? false ) {
                if(job.lastPingDate!.isBefore(DateTime.now().subtract(Duration(minutes: 30))) ) { 
                    print("Next PID: ${job.jobPid} is hangs and will be restarted");
                    job.parserStatus = ParserStatus.hanging; 
                }
          } 
        }
      }

  });
    removeDeadInstances();
  }

removeDeadInstances() {
      jobModelList.removeWhere((element) => element.parserStatus ==  ParserStatus.hanging );  
  }  

但我会定期收到错误:

Unhandled exception: Concurrent modification during iteration: Instance(length:1) of '_GrowableList'.

而且我不明白如何解决它。

标签: listdart

解决方案


推荐阅读