c# – 同时有效地进行儿童评估

前端之家收集整理的这篇文章主要介绍了c# – 同时有效地进行儿童评估前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个对象列表,每个对象都有一个bool ShouldRun()方法.

我正在迭代对象列表,并检查每个对象上的ShouldRun(),并在第一个上调用Run()返回true

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

我想并行执行此操作,因为评估shouldRun可能需要相当长的时间,并且让集合中的后续元素尽早开始评估是有利的.

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

1只运行一个项目

2如果之前的项目为true,或者尚未完成评估,请不要运行以后的项目

3如果所有“早期”项目都返回false,并且中间项目返回true,则不要等待后面的项目完成评估,因为您知道它不能提前覆盖任何内容.

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

想法?

背景资料:

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

一些较高优先级的任务可以通过立即知道的传感器变量触发,例如:我摔倒,修复它!

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

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

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

解决方法

我不是PLINQ天才,但这个简单的答案不会足够吗?
var childToRun = Children.AsParallel().AsOrdered()
    .Where(x => x.ShouldRun()).FirstOrDefault();
childToRun.Run();
原文链接:https://www.f2er.com/csharp/99686.html

猜你在找的C#相关文章