当C#Parallel.ForEach用于替换文件文本时会引入竞争条件吗?

时间:2016-08-25 22:58:36

标签: c# replace race-condition parallel.foreach

C#中的以下代码块是否会引入竞争条件:

void AssignValue(string VariableName, int VariableValue)
{
    // Get the non-public instance variable (field)
    FieldInfo field = GetType().GetField(VariableName, BindingFlags.NonPublic | BindingFlags.Instance);

    // Set the variable's value for this instance of the type
    field.SetValue(this, VariableValue);
}

1 个答案:

答案 0 :(得分:7)

是的,有竞争条件。

fileText = fileText.Replace(guidObj.Value.OldGuid, guidObj.Value.NewGuid);

如果两个单独的线程开始此操作,它们都将从原始字符串开始。无论哪一个先完成,都会写入fileText变量。当第二个完成时,它也将写入同一个变量。但由于两个线程都在原始字符串上运行,当第二个线程完成时,第一个线程所做的更改将被覆盖。