gpt4 book ai didi

c# - 使用 PLINQ 返回 null

转载 作者:太空狗 更新时间:2023-10-29 20:40:44 24 4
gpt4 key购买 nike

我有一个 IEnumerable 的扩展方法,它会遍历集合,处理它的业务,然后返回一个新的 IEnumerable。

我尝试使用 .AsParallel().ForAll() 来使用 PLINQ,这会显着加快迭代速度(当然应该这样做)但是当返回集合时,该集合中通常有一些对象是空。

我假设这可能是因为它在所有“业务”有机会完成之前返回集合?如果我调试并放置断点,则没有空值。

我应该使用某种“等待此操作完成”的方法吗?

编辑:为了更清楚一点,forall 中有业务逻辑,修改属性等。有必要循环操作,而不是简单地选择一些东西。

最佳答案

答案取决于您所说的返回 的含义,因为ForAll 方法不返回任何内容。它会为集合的所有元素并行调用您指定的委托(delegate)。我假设您的代码如下所示:

data.AsParallel().ForAll(() => /* calculate and store result somewhere */);
// more code

ForAll 方法不会等待所有委托(delegate)完成,因此 more code 可以在所有委托(delegate)完成之前执行(您还需要注意store result somewhere 位,因为它可能同时为多个委托(delegate)运行!)

我认为使用 Select 方法可以更优雅地重写代码:

var res = data.AsParallel().Select(() => /* calculate the result */);

在这种情况下,委托(delegate)只返回结果。 Where 方法收集所有结果,当您迭代返回的 IEnumerable 时,它保证所有委托(delegate)都完成计算。

关于c# - 使用 PLINQ 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293091/

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