警惕C#版本差异多线程中的foreach陷阱
警惕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<