繁体   English   中英

C#Parallel.ForEach抛出indexOutOfBoundException

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM