Me he acostumbrado a usar Parallel.For() en las extensiones paralelas de .Net, ya que es una manera simple de paralelizar código sin tener que iniciar y mantener manualmente los hilos (lo que puede ser difícil). Ahora estoy mirando un ciclo infinito (hago algo hasta que señalo que se detenga) que deseo paralelizar, no hay un argumento libre de sobrecarga Parallel.For() para hacer esto, así que me preguntaba cuál sería el mejor enfoque aquí. ser. En principio tan sólo pudiera hacer algo como: (?)¿Cuál es la mejor manera de lograr un bucle infinito paralelo?
Parallel.For(0, int.Max)
Pero estoy sospechando que podría no ser un patrón de espera/eficiente para la lógica de partición de trabajo para manejar
Otra opción es algo así como:
for(;;)
{
Parallel.For(0, 128, delegate()
{
// Do stuff.
}
}
Pero eso parece poco elegante y también puede resultar en una partición de trabajo ineficiente.
Ahora mi instinto es hacer esto manualmente al crear y mantener mis propios hilos, pero me gustaría obtener algunos comentarios/opiniones sobre esto. Gracias.
ACTUALIZACIÓN === ===
estoy usando una versión simplificada del código del artículo en la respuesta aceptada (He quitado el parámetro ParallelOptions). Aquí está el código ...
public class ParallelUtils
{
public static void While(Func<bool> condition, Action body)
{
Parallel.ForEach(IterateUntilFalse(condition), ignored => body());
}
private static IEnumerable<bool> IterateUntilFalse(Func<bool> condition)
{
while (condition()) yield return true;
}
}
Un ejemplo de uso sería:
Func<bool> whileCondFn =() => !_requestStopFlag;
ParallelUtils.While(whileCondFn, delegate()
{
// Do stuff.
});
hay algún modelo de Threading que podría consumir – MethodMan