如果我从 parallel.Foreach 向 hashset 添加元素,我会遇到问题吗?

Could I have problems if I add elements to hashset from a parallel.Foreach?

我有一个 POCO 实体,它有一个哈希集作为导航 属性。在某些情况下,我需要向这个集合中添加新元素,所以我在想这样的事情:

MyType myPocoEntity = new MyType();
Parallel.ForEach(myList,
    (iterator, state) =>
{
    myPocoEntity.MyCollection.Add(new MyType(){ Id = iterator.Id });
}

我的想法是为列表中的每个元素创建一个新对象,我必须将其添加到我的 POCO 实体的哈希集中。

只是一个添加操作,但我不知道虽然它只是一个添加操作,但我是否可以解决问题,或者我是否应该先使用并发集合,然后再将元素传递给导航属性,但在这种情况下,我想最好使用 for 循环而不是并行。

所以我想知道使用并行 foreach 是否是个好主意。

谢谢。

我假设切换线程上下文和同步比 HashSet<T>.Add() 调用更昂贵,即使对于从 for 循环添加的大型集合也是如此。但是,将新成员添加到集合中的最快方法始终是使用 HashSet<T>.AddRange 操作,因此我会通过创建新集合来进一步优化代码,如果它明显小于目标集合并且比我要添加的要小只需调用 HashSet<T>.AddRange 即可。