![](/img/trans.png)
[英]ControllerContext throwing error in Parallel.ForEach in mvc c#
[英]c# Parallel.ForEach throwing indexOutOfBoundException
我正在使用许多parallel foreach
循环。 它们主要用于详细说明数据并将其添加到列表中。
这是我的方法的一个例子:
System.Threading.Tasks.Parallel.ForEach(magazzini, m =>
{
try
{
warehouse.Add(new WAREHOUSE()
{
ID = m.Id,
NAME = m.new_name,
CODE = m.new_codice,
INTEGRATION_KEY = m.dynamics_integrationkey,
RESOURCE_ID = m.new_mobileuser == null ? Guid.Empty : m.new_mobileuser.Id
});
}
catch (Exception ex)
{
Logging.Error(authToken, string.Format("GetAllMagazzini|Magazzini|{0}", ex.InnerException));
}
});
我在这篇旧文章中读到它可能是由List<T>
的非线程安全属性引起的。 我的问题如下:
我不仅拥有像这样的循环,而且拥有很多操作的长循环。 我必须使用parallel.foreach
因为使用经典的foreach
会使查询超时,因为它在WebService上。
我如何使用parallel.foreach
避免indexOutOfBoundException
? 我必须在其他地方更改List<T>
吗?
是的,将List<T>
更改为ConcurrentBag<T>
因为在List<T>
调整后备数组的大小将导致并发写入操作出现问题。 另一种选择是在添加操作周围创建一个lock
。
如果没有其他操作需要添加到Parallel.ForEach
并发中,这将对性能产生负面影响。 如果是这种情况,请创建一个常规的foreach
或使用AddRange
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.