[英]Does C# Parallel.ForEach introduce a race condition when used to replace file text?
C#中的以下代碼塊是否引入了競爭條件:
Parallel.ForEach(guidDictionary, (dictionaryItem) =>
{
var fileName = dictionaryItem.Key;
var fileText = File.ReadAllText(fileName, Encoding.ASCII);
Parallel.ForEach(guidDictionary, (guidObj) =>
{
fileText = fileText.Replace(guidObj.Value.OldGuid, guidObj.Value.NewGuid);
});
File.WriteAllText(fileName, fileText);
});
?
是的,有比賽條件。
fileText = fileText.Replace(guidObj.Value.OldGuid, guidObj.Value.NewGuid);
如果兩個單獨的線程啟動此操作,則它們都將從原始字符串開始。 首先完成的fileText
都會寫入fileText
變量。 當第二個完成時,它還將寫入同一變量。 但是,由於兩個線程都在原始字符串上運行,因此第二個線程完成時,第一個線程所做的更改將被覆蓋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.