Parallel.Foreach是否可以安全地将值分配给目标列表项?

时间:2018-10-01 19:52:42

标签: c# multithreading list thread-safety

我有一个带有修改后值的源列表,需要使用Parallel.Foreach将这一更改添加到第二个列表中。

我想知道这是否是线程安全的,代码示例:

Parallel.ForEach(sourceList, (srcItem) =>
{
    var destItem = destinationList.FirstOrDefault(p => p.Id == srcItem.Id);
    destItem.Color = srcItem.Color;
});

可以吗?还是需要设置一些同步或锁定?

1 个答案:

答案 0 :(得分:1)

如果条件如此

1)确保在源id和目标id之间存在一对一的映射

2)destinationListParallel.ForEach期间从不更改,也没有内容,除了分配Color

运行此代码应该是安全的,并且不需要同步。