警惕C#版本差異多線程中的foreach陷阱?
- 同樣的代碼,不同的結果
- 閉包捕獲的“時間差”問題
- 繞過閉包陷阱的三種方法
- Lambda立即捕獲(代碼簡潔)
- 顯式傳遞參數(兼容性最佳)
- 使用Parallel.ForEach(官方推薦)
- 注意事項:版本兼容性指南
- 警惕多線程中的foreach陷阱:C#版本差異引發的“幽靈數據”問題
同樣的代碼,不同的結果
當你使用foreach循環結合Task.Factory.StartNew創建多線程任務時,可能會遇到以下詭異現象:
- 在VS2010(.NET 4.0 + C# 4.0) 下運行,多個線程打印出重復的內容
- 在VS2019(.NET 4.0 + C# 8.0) 下運行,結果卻完全正常
示例代碼
void FileParallelExecute(string file)
{Console.WriteLine("FileParallelExecute file: " + file);
}List<string> fileList = new List<string<