So erstellen Sie eine IEnumerable-Methode für parallele Methoden

8

Im Anschluss daran posten , ich möchte diese Methode parallelisieren:

%Vor%

Ich möchte, dass die Methode "yield returns" ein Protokoll liefert, wenn eine der Methoden GetLogs beendet ist. Wenn ich 4 Computer habe, die zurückgeben:

  • Computer 01: "a", "b", "c", "d", "e"
  • Computer 02: 1, 2, 3, 4, 5
  • Computer 03: "Alpha", "Beta", "Gamma", "Delta", "Epsilon"
  • Computer 04: "Ich", "II", "III", "IV", "V"

Bei der "sequentiellen Methode" lautet die Ausgabe:

%Vor%

Und die Methode läuft in 20 Sekunden ab. Es gibt ein Thread.Sleep(1000) in der GetLogs Methode.

Ich möchte, dass die Ausgabe so aussieht:

%Vor%

und läuft in wenigen Sekunden.

Ich möchte zu den Methoden ein IEnumerable

zurückgeben     
Florian 24.11.2011, 14:12
quelle

2 Antworten

15

Das brauchst du:

%Vor%

Wenn Sie die Verarbeitung von 4 computer -s gleichzeitig starten möchten, können Sie den Grad der Parallelität wie folgt anpassen:

%Vor%

Nachfolgend finden Sie eine vereinfachte Erklärung nur zum Verständnis. Um mehr darüber zu erfahren, besuchen Sie PLINQ (Parallel LINQ) auf MSDN.

Nun, .AsParallel() - teilt das aufzählende computers in 4 Teile auf und startet 4 Threads gleichzeitig. Jeder Thread führt cpt.GetLogs() für jede computer aus. Das Ergebnis ist IEnumerable<IEnumerable<string>> - Aufzählbar für Aufzählungen. SelectMany() wird verwendet, um diese Liste zu reduzieren, indem innere Enumerables verkettet und äußere Enumerables eliminiert werden. Die Ergebnisse werden automatisch in der Reihenfolge ihrer Ankunft in den Hauptthread zusammengeführt.

    
achitaka-san 24.11.2011, 14:22
quelle
1

Sehen Sie sich die parallelen Erweiterungen zu .NET und die TPL (Task Parallel Library).

Sie erlauben Ihnen, ein foreach zu nehmen und es leicht mit Parallel.ForEach zu paralellisieren.

    
Oded 24.11.2011 14:16
quelle