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

间歇性出现System.InvalidOperationException枚举操作无法执行问题求助

错误根因

这个System.InvalidOperationException报错的核心原因是正在遍历的inputProfile.Emails集合在枚举过程中被其他线程修改,属于典型的非线程安全集合并发访问问题。

报错间歇性触发的特征完全匹配并发问题的表现:只有当遍历操作和集合修改操作的CPU时间片刚好重叠时才会抛出异常,低并发场景下大概率不会触发,因此才会出现每约50次调用才偶现一次的情况。

结合你提供的代码逻辑可以判断,当前遍历逻辑本身没有修改inputProfile.Emails集合,修改操作一定发生在其他复用了inputProfile对象的线程中:比如API响应解析逻辑、其他并行执行的业务逻辑,在你遍历集合的同时对Emails执行了新增/删除/元素修改操作。此外inputProfile是dynamic类型,运行时绑定的如果是List<T>这类默认非线程安全的集合,天然不支持多线程下同时遍历和修改。

修复方案

可按业务需求选择对应方案处理:

  • 优先方案:遍历前对inputProfile.Emails生成快照副本,用副本完成遍历操作,完全避免原集合修改对当前遍历的影响,代码改动极小:
// 遍历前调用ToList()生成独立快照,后续原集合修改不会影响当前遍历逻辑
foreach (var item in inputProfile.Emails.ToList())
  • 兜底方案:如果业务要求必须遍历实时最新的集合数据,不能使用快照,则需要在所有访问inputProfile.Emails的代码位置加锁,保证同一时间只有一个线程对集合执行修改或遍历操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:18:04