gpt4 book ai didi

c# - Parallel.ForEach 丢失数据

转载 作者:可可西里 更新时间:2023-11-01 08:44:52 25 4
gpt4 key购买 nike

Parallel.ForEach 有助于提高性能,但是,我发现数据丢失了。

已尝试 - 变量结果、处理数据为 ConcurrentBag<IwrRows>

1)

Parallel.ForEach(results, () => new ConcurrentBag<IwrRows>(), (n, loopState, localData)    =>
{
return ProcessData(n); // ProcessData complicated business logic
}, (localData) => AddRows(localData, processedData, obj)
);

2)

await Task.Run(() => Parallel.ForEach(results, item =>
{
ProcessData(item, processedData);
}));

3)

Parallel.ForEach(results, item =>
{
ProcessData(item, processedData);
});

他们都丢失了一些行。

当我使用 foreach block 时,它始终返回相同的值,但是速度慢了 4 倍。

foreach (var item in results)
{
// ProcessData returns a List<IwrRows>
processedData.AddRange(ProcessData(item));
}

不确定我在这里遗漏了什么。

结果 - 51112Foreach 返回 41316 行。ForeachParallel 返回 41308 或 41313 或 41314 随每次运行而变化

最佳答案

您似乎很难处理结果并将它们重新放入一个连贯的列表中。您可以使用 PLinQ,这样您就不必担心结果容器是线程安全的:

var processedData = yourData.AsParallel().Select(ProcessData).ToList();

关于c# - Parallel.ForEach 丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36085452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com