从并行Foreach循环返回方法

时间:2020-07-31 11:25:16

标签: c# performance parallel-processing parallel.foreach

我有Dictionary的{​​{1}}(在2D空间随机分布)和2D空间的Circles。 该方法应仅返回ANY圆,其中Position在圆的半径内。 (可能有不止一个,但是我不在乎它选择哪个)

我当前的实现如下:

Position

基本上,它遍历所有圆并检查到中心的距离是否小于其半径,这意味着该位置在圆内。

它几乎可以按照我想要的方式工作。但是,对于大量圈子(〜5000个),遍历所有圈子都需要一定的时间。因此,我想实现一个int GetAnyCircleWithinRadius(Dictionary<int, Circle>circles, Position position) { foreach (Circle circle in circle.Values) { double deltaX = cirlce.center.x - position.x; double deltaY = cirlce.center.x - position.x; double distance = Math.Abs(deltaX * deltaX + deltaY * deltaY); if (distance < circle.radius) return circle.index; } } 循环,但是从那里我无法像在常规Parallel.ForEach循环中那样返回该方法。

有没有办法从foreach循环返回整个方法,从而像在常规Parallel.ForEach循环中那样停止以后的所有其他任务/任务?

我也很高兴收到其他性能提示! :)

0 个答案:

没有答案