在使用ConcurrentBag的foreach循环时,可能会遇到循环不起作用的情况。这通常是由于在循环过程中,ConcurrentBag的元素发生了修改导致的。为了解决这个问题,可以使用以下方法:
ConcurrentBag bag = new ConcurrentBag();
// 添加元素到ConcurrentBag
// ...
List list = bag.ToList(); // 转换为List
foreach (var item in list)
{
// 对元素进行操作
}
ConcurrentBag bag = new ConcurrentBag();
// 添加元素到ConcurrentBag
// ...
lock (bag)
{
foreach (var item in bag)
{
// 对元素进行操作
}
}
这样做的好处是确保在foreach循环期间,没有其他线程可以修改ConcurrentBag的元素。
请注意,使用lock关键字可能会导致性能下降,因为它会阻塞其他线程对ConcurrentBag的访问。因此,如果ConcurrentBag的元素经常被修改,使用ToList方法将ConcurrentBag转换为List可能是更好的选择。
下一篇:并发数据更改异常