C# 得到;“索引超出范围”;c中的List.Add()出错#

C# 得到;“索引超出范围”;c中的List.Add()出错#,c#,C#,这是密码 List<string> something = new List<string>(); Parallel.ForEach(anotherList, r => { .. do some work something.Add(somedata); }); List something=newlist(); Parallel.ForEach(另一个列表,r=> { …做些工作 添加(一些

这是密码

List<string> something = new List<string>();
Parallel.ForEach(anotherList, r =>
     {
            .. do some work
             something.Add(somedata);
      });
List something=newlist();
Parallel.ForEach(另一个列表,r=>
{
…做些工作
添加(一些数据);
});

我得到的
索引超出范围
错误大约为每运行100次1次。是否有任何方法可以防止线程引起的冲突(我想是这样?

为了防止这个问题,您可以在并行部件中使用列表或类似的并发集合,而不是列表。并行任务完成后,可以将其放入
列表中


有关更多信息,请查看System.Collections.Concurrent命名空间,以找到适合您的用例的集合。

我发现
锁定(您的对象)
也否定了线程问题

提示-写入时
列表
线程安全吗?宾果,我正在使用
ConcurrentStack
现在,它已经
推送()
PushRange()
,非常有用。还有一个
ToList()
来完成你基本上否定了Parallel.Foreach方法的好处。我确信使用并发对象是比使用锁对象更好的解决方案。