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:
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ückgebenDas 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:
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.
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.
Tags und Links c# parallel-processing nested-loops