簡體   English   中英

在用於替換文件文本時,C#Parallel.ForEach是否引入競爭條件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM