首页 > 解决方案 > Parallel.Foreach 是否可以安全地将值分配给目标列表项?

问题描述

我有一个带有修改值的源列表,需要使用 Parallel.Foreach 将此更改分配给第二个列表。

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

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

没关系?还是需要设置一些同步或锁定?

标签: c#multithreadinglistthread-safety

解决方案


如果有这样的条件

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

2)destinationList期间永远不会改变Parallel.ForEach,它的内容也不会改变,除了分配Color

运行这段代码应该是安全的,不需要同步。


推荐阅读