gpt4 book ai didi

c# - 具有大列表的并行 Foreach 抛出异常

转载 作者:行者123 更新时间:2023-11-30 16:04:56 25 4
gpt4 key购买 nike

我有一个大列表(1000 或更多),我正在使用 Parallel.Foreach 来循环它,但我得到了这个异常:

System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at
System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at
System.Threading.Tasks.Task.Wait()

请告诉我为什么会出现此异常并提供解决方案,以及如何提高并行 foreach 的性能?

var results = new List<BO>();
var localLockObject = new object();

Parallel.ForEach(
emails,
() => new List<BO>(), (email, state, localList) =>
{
var item = new BO();
localList.Add(item.Validate(email));
return localList;
},
finalResult => { lock (localLockObject) results.AddRange(finalResult); }
);

最佳答案

您的 Parallel.ForEach 声明似乎没问题,我不确定这是产生异常的地方。

但是,针对此用例的更好解决方案是使用 PLINQ不需要同步:

var result = emails.AsParallel()
.Select(email =>
{
var item = new BO();
return item.Validate(email);
}).ToList();

关于c# - 具有大列表的并行 Foreach 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34294487/

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