Was ist der beste Weg, um ein parallel-Endlosschleife?

Habe ich genutzt, um mit Hilfe Parallel.Für() in .Net, die parallel extensions, da es eine einfache Möglichkeit der Parallelisierung von code, ohne manuell zu starten und zu pflegen threads (das kann fummelig). Ich bin jetzt auf der Suche in eine Endlosschleife (etwas tun, bis ich ein signal, es zu stoppen), dass ich wünschte, zu parallelisieren, gibt es nicht ein argument, freie Parallele.Für() überladen, um dies zu tun, so Frage mich, was der beste Ansatz wäre hier. Im Prinzip könnte ich mir so etwas wie:

Parallel.For(0, int.Max)

Aber ich bin zu Ahnen, dass vielleicht nicht die erwartete/effiziente Muster für die Arbeit, die Partitionierung der Logik zu behandeln(?)

Eine weitere option ist das etwas wie:

for(;;)
{
    Parallel.For(0, 128, delegate()
    {
       //Do stuff.
    }
}

Aber das scheint mir unelegant und kann auch dazu führen, die ineffizient arbeiten partitionieren.

Recht jetzt mein Instinkt ist, um dies manuell tun, indem Sie erstellen und pflegen meine eigenen threads, aber ich wäre daran interessiert, ein feedback/Meinungen zu diesem Thema. Danke.

=== UPDATE ===

Verwende ich eine vereinfachte version des Codes aus dem Artikel in der akzeptierten Antwort (ich habe entfernt die ParallelOptions parameter). Hier ist der code...

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; 
    }
}

Beispiel wäre:

Func<bool> whileCondFn = () => !_requestStopFlag;
ParallelUtils.While(whileCondFn, delegate()
{
    //Do stuff.


});
  • gibt es irgendwelche Threading-Modell, das Sie verbrauchen kann
InformationsquelleAutor redcalx | 2011-12-29
Schreibe einen Kommentar