【发布时间】:2017-03-31 17:34:46
【问题描述】:
在我的 web api 控制器中,我使用 Parallel.ForEach() 循环遍历一个列表。我有一个计数器,我在 Parallel.ForEach 代码中递增。我注意到每次运行它时计数器都是一个可变数字,它从来没有像我用 Parallel.ForEach() 循环的列表一样高。似乎 Parallel.ForEach() 并没有在完成循环所有元素之前等待返回。
// get all the new records from the csv
var newData = csv.GetRecords<MyEFTable>().ToArray();
int count = 0;
Parallel.ForEach(newData, (d) => {
count++});
newData 有 6588 个项目,计数通常在 3400 个左右,但每次都是可变的。这很奇怪。
【问题讨论】:
-
count++不是线程安全的。将其替换为Interlocked.Incremenet(ref count)
标签: c# parallel.foreach