2010-08-21 15 views
7

Supposons que vous ayez un tableau de 1000 nombres entiers aléatoires et que vous deviez faire une boucle pour trouver le numéro 68 par exemple. L'utilisation du nouveau Parallel.For sur un processeur à quatre cœurs améliorerait considérablement la vitesse, faisant que chaque cœur ne fonctionnerait que sur 250 éléments de tableau.Parallèle.Pour l'interruption

La question est: est-il possible d'interrompre la boucle Parallel.For lorsque la condition suivante est remplie?

if (integerArray[i] == 68) 

    break; 

Merci.

Répondre

9

Si vous voulez arrêter après l'itération exécution en cours sont effectuées (mais itérations avant que le courant sera exécuté - à savoir les itérations avec un indice inférieur = i)

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

ou si vous voulez arrêter après que le courant et avant cette itérations (en termes d'indice = i) devrait également arrêter

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

mais dans les deux cas, il est bon de vérifier si doit être interrompu le travail si l'itération peut prendre un certain temps

s.ShouldExitCurrentIteration 

lire la suite ici Parallel.For Method (Int32, Int32, Action(Int32, ParallelLoopState))

+0

J'ai mélangé quelques notions sur 'Break' et' Stop' - s'il vous plaît relisez la réponse :) –