2010-08-21 17 views
7

Supongamos que tiene una matriz de 1000 números enteros aleatorios y necesita hacer un bucle para encontrar el número 68, por ejemplo.Paralelo.Para la interrupción

Usando el nuevo Paralelo.Para una CPU de cuatro núcleos mejoraría considerablemente la velocidad, haciendo que cada núcleo funcione solo con 250 elementos de matriz.

La pregunta es: ¿es posible interrumpir el bucle Parallel.For cuando se cumple la siguiente condición?

if (integerArray[i] == 68) 

    break; 

Gracias.

Respuesta

9

Si desea detener después de la iteración de ejecución actual se realizan (pero iteraciones antes de que la corriente se ejecutará - es decir, las iteraciones con un menor índice = i)

Parallel.For(0, 100, (i, s) => 
    { 
     s.Break(); 
    }); 

o si desea dejar después que la corriente utilizados y sus interacciones antes de esto (en términos del índice = I) también debería dejar de

Parallel.For(0, 100, (i, s) => 
    { 
     s.Stop(); 
    }); 

pero en ambos casos es una buena práctica para comprobar si el trabajo debe ser abortado si la iteración puede tomar un tiempo

s.ShouldExitCurrentIteration 

leer más aquí Parallel.For Method (Int32, Int32, Action(Int32, ParallelLoopState))

+0

He mezclado alguna noción sobre 'Break' y' Stop' - por favor, vuelva a leer la respuesta :) –

Cuestiones relacionadas