gpt4 book ai didi

c# - 高效的 foreach child 并行评估

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

我有一个对象列表,每个对象上都有一个 bool ShouldRun() 方法。

我目前正在遍历对象列表,检查每个对象的 ShouldRun(),并在第一个对象上调用 Run() 以返回 true

foreach (child in Children)
{
if (child.ShouldRun())
{
child.Run();
break;
}
}

我想并行执行此操作,因为评估 shouldRun 可能会花费相当多的时间,并且让集合中后面的元素尽早开始评估是有利的。

但是,我想不出满足这些条件的方法:

1 只运行一项

2 如果较早的项目为真或尚未完成评估,则不要运行较晚的项目

3 如果所有“较早”的项都返回 false,并且中间项返回 true,请不要等待较晚的项完成评估,因为您知道它无法覆盖较早的任何内容。

我想做一个并行的“where”linq 查询来检索 shouldRun() 的所有项目然后排序,但这将违反条件 #3

想法?

背景信息:

该系统用于通用机器人 AI 系统。

一些更高优先级的任务可以由立即已知的传感器变量触发,例如:我摔倒了,修理它!

其他任务可能是计算密集型的(从相机进行图像识别,并接近可见目标)

其他任务可能是数据库或远程驱动的(从数据库中查找可能的目标位置列表,然后导航到那里以查看您是否可以进入其中一个的可见范围)

一些任务本身有子任务,本质上是在任务的子集上递归地开始这个过程,孙任务将通过链向上传递

最佳答案

我不是 PLINQ 天才,但这个更简单的答案还不够吗?

var childToRun = Children.AsParallel().AsOrdered()
.Where(x => x.ShouldRun()).FirstOrDefault();
childToRun.Run();

关于c# - 高效的 foreach child 并行评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3125692/

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