Parallel.ForEach() 没有得到预期的结果

用户441521

在我的 web api 控制器中,我正在使用 Parallel.ForEach() 遍历一个列表。我有一个在 Parallel.ForEach 代码中递增的计数器。我注意到每次运行 counter 时它都是一个可变数字,它永远不会像我用 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 个左右,但每次都是可变的。这很奇怪。

艾米

你正在进入竞争状态。您需要使用var newCount = Interlocked.Increment(ref count);来安全地在多线程环境中递增变量。newCount变量是递增的计数器。

发生这种情况的原因是因为count++不是原子的。它实际上是三个操作:获取值,加 1,然后将其存储回来。如果这三件事同时发生,事情就会变得混乱和不稳定。

在处理线程时,确保每个线程不会操作相同的数据至关重要,否则它们会相互挤压。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Parallel.ForEach CancellationTokenSource没有停止

来自分类Dev

GridBagLayout没有得到预期的结果

来自分类Dev

setMinutes没有得到预期的结果

来自分类Dev

Parallel.ForEach有序输入?

来自分类Dev

Parallel.ForEach有序输入?

来自分类Dev

Parallel.ForEach没有执行该方法

来自分类Dev

Parallel.ForEach没有执行该方法

来自分类Dev

QPolygon containsPoints 没有得到预期的结果

来自分类Dev

没有得到预期的结果 os.system

来自分类Dev

使用 .each() 函数时没有得到预期的结果

来自分类Dev

Foreach对象比foreach -parallel更快?

来自分类Dev

Looped Parallel.For没有给出预期的结果

来自分类Dev

迭代方法调用的结果时,Parallel.Foreach的行为如何?

来自分类Dev

Parallel.Foreach循环获得的结果与For循环不同?

来自分类Dev

PowerShell的`ForEach -Parallel'的简写

来自分类Dev

Parallel.ForEach IndexOutOfRangeException

来自分类Dev

PowerShell的`ForEach -Parallel`的简写

来自分类Dev

Parallel.ForEach 用法

来自分类Dev

立即取消C#Parallel.Foreach的所有运行线程

来自分类Dev

具有Parallel.Foreach的数据表中的indexoutofrangeexception

来自分类Dev

具有yield和Parallel.ForEach的奇怪行为

来自分类Dev

具有Parallel.Foreach的数据表中的indexoutofrangeexception

来自分类Dev

具有Where条件的Parallel.ForEach源列表

来自分类Dev

具有不同子程序的 VB Parallel.ForEach

来自分类Dev

C#Parallel.ForEach和Task.WhenAll有时返回的值少于预期

来自分类Dev

jq没有得到预期的输出

来自分类Dev

$GLOBALS 没有得到预期的数据

来自分类Dev

Parallel.Foreach / For如何调用BlockingCollection.Take?有或没有CancellationToken

来自分类Dev

某些Parallel.ForEach <T>项在ThreadPool上运行,有些则没有

Related 相关文章

热门标签

归档