Tengo una lista de objetos, cada uno con un bool ShouldRun() método en ellos.Evaluación del niño Foreach eficiente en paralelo
estoy iterando la actualidad más de la lista de objetos, y la comprobación de ShouldRun() de cada objeto, y llamando Run() en la primera de ellas para volver verdadero
foreach (child in Children)
{
if (child.ShouldRun())
{
child.Run();
break;
}
}
me gustaría hacer esto de forma paralela , porque la evaluación de shouldRun puede tomar una buena cantidad de tiempo, y es ventajoso permitir que los elementos posteriores de la colección comiencen su evaluación con anticipación.
Sin embargo, no puedo pensar en una manera de hacer esto que satisfaga estas condiciones:
1 ejecutar sólo un elemento
2 No ejecute un artículo más adelante si un artículo anterior es cierto, o tiene aún no se ha terminado de evaluar
3 Si todos los elementos "anteriores" han resultado falsos y un elemento del medio es verdadero, no espere más para finalizar la evaluación porque sabe que no puede anular nada anteriormente.
se me ocurrió hacer un paralelo "donde" consulta LINQ para recuperar todos los elementos que shouldRun() y después de clasificación, pero esto va a violar la condición # 3
ideas?
información Antecedentes:
El sistema es un sistema de inteligencia artificial robótica generalizada.
Algunas de las tareas de mayor prioridad se pueden desencadenar mediante variables de sensor conocidas de inmediato, por ejemplo: ¡me estoy cayendo, arréglenlo! otros
tareas podrían ser computacionalmente intensivos (hacer el reconocimiento de imágenes de la cámara, y el enfoque de objetivos visibles)
otras tareas podrían ser la base de datos o remotamente accionados (consultar una lista de ubicaciones objetivos probables a partir de una base de datos, y luego navegue hasta allí para ver si puede entrar en el rango visible de uno de ellos)
Algunas de las tareas tienen tareas hijo, lo que esencialmente va a iniciar este proceso de forma recursiva en un subconjunto de tareas, y la tarea de nieta pasar a través de la cadena
Pregunta interesante. Defina "cantidad decente de tiempo", si puede, y tal vez lo que hace que cada cheque sea tan largo. ¿Está haciendo una llamada a la base de datos? ¿Servidor remoto? ¿Tiene su propio bucle interno que está teniendo lugar? Ese tipo de cosas. –
podría ser todo lo anterior. Ver ediciones –
Creo que a su código de ejemplo le falta un operador ('var') –