target.Add(i) 需要加锁,你也可以使用 Parallel.ForEach 的其它重载版本,可以使用 local 存储,最后合并多个 local。
获取0-1000000内的能被2整除的数
target.Add(i); 需要加锁
然而并不需要....我是说真的
var source = Enumerable.Range(0, 1000); var target = new List<int>(); Parallel.ForEach(source, i => { if (i % 2 == 0) { lock (target) { target.Add(i); } } });
如2,3楼所言,target是个共享资源,在并行操作下如果不加锁控制下,可能出现的情况就是这里target获取不到正确的值,可能存在值遗漏情况,当然这也不是绝对的,运气好点target得到的值也会是正确的