我有一个大列表(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/