0Pricing
C# Academy · Lektion

Parallel.ForEach, PLINQ

Führen Sie Arbeiten mit Parallel.ForEach parallel aus und erstellen Sie parallele Pipelines mit PLINQ (AsParallel, WithDegreeOfParallelism, AsOrdered).

Parallel.ForEach, PLINQ ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Warum parallele Schleifen

Ziel: Nutzen Sie die CPU besser aus.

  • Parallel.ForEach: Aktion pro Element
  • PLINQ: parallele Abfrage mit Operatoren
  • Steuern Sie den Grad der Parallelität
  • Gehen Sie vorsichtig mit Seiteneffekten um

Grundlagen von Parallel.ForEach

Parallel.ForEach verteilt Iterationen auf Threads; für jedes Element wird die angegebene Aktion ausgeführt.

using System;
using System.Threading.Tasks;

public class Program
{
  public static void Main(string[] args)
  {
    int[] data = new int[] { 1, 2, 3, 4, 5, 6 };

    // Runs iterations concurrently on thread pool
    Parallel.ForEach(data, x =>
    {
      int y = x * x; // small CPU work
      Console.WriteLine("x=" + x + " y=" + y + " on " + Environment.CurrentManagedThreadId);
    });
  }
}

Parallelität steuern

Verwenden Sie ParallelOptions.MaxDegreeOfParallelism, um die Parallelität zu begrenzen, wenn Ressourcen knapp sind.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  public static void Main(string[] args)
  {
    int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
    ParallelOptions opt = new ParallelOptions();
    opt.MaxDegreeOfParallelism = 2; // limit concurrency

    Parallel.ForEach(data, opt, x =>
    {
      Console.WriteLine("Start " + x);
      Thread.Sleep(150); // simulate work
      Console.WriteLine("Done " + x);
    });
  }
}

PLINQ-Pipeline

PLINQ führt LINQ-Operatoren parallel aus. ForAll verarbeitet Ergebnisse gleichzeitig (ohne festgelegte Reihenfolge).

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    int[] nums = Enumerable.Range(1, 20).ToArray();

    // Filter then project in parallel
    var query =
      nums
        .AsParallel()
        .WithDegreeOfParallelism(2)
        .Where(n => n % 2 == 0)
        .Select(n => n * n);

    // ForAll consumes in parallel; order not guaranteed
    query.ForAll(sq => Console.WriteLine(sq));
  }
}

Steuerung der Reihenfolge

Verwenden Sie AsOrdered, um die Reihenfolge beizubehalten; AsSequential wechselt bei Bedarf zurück zu LINQ mit nur einem Thread.

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    int[] nums = new int[] { 5, 4, 3, 2, 1 };

    // Preserve original sequence order for the output
    var ordered =
      nums.AsParallel().AsOrdered().Select(n => n * 10).ToArray();

    // Switch back to sequential for a section if needed
    var seq =
      nums.AsParallel().Select(n => n + 1).AsSequential().Where(n => n > 3).ToArray();

    Console.WriteLine("Ordered: " + string.Join(",", ordered));
    Console.WriteLine("Sequential tail: " + string.Join(",", seq));
  }
}

Sicherheit und Tipps

Tipps:

  • Vermeiden Sie gemeinsam veränderlichen Zustand; bevorzugen Sie reine Funktionen.
  • Verwenden Sie threadsichere Sammlungen, wenn Sie schreiben müssen.
  • Verarbeiten Sie größere Batches statt vieler kleiner Arbeitselemente.
  • Messen Sie: Parallelität hilft bei CPU-gebundener Arbeit, nicht beim Warten auf I/O.

Parallel.ForEach im Vergleich zu PLINQ

Schnelltest: Was ist ein wesentlicher Unterschied zwischen Parallel.ForEach und PLINQ?

Zusammenfassung

Zusammenfassung: Verwenden Sie Parallel.ForEach für Aktionen pro Element und PLINQ zum Erstellen paralleler Abfragen, zum Steuern der Parallelität und optional zum Beibehalten der Reihenfolge.

Häufig gestellte Fragen

Ist die Lektion „Parallel.ForEach, PLINQ“ kostenlos?

Ja — der vollständige Text von „Parallel.ForEach, PLINQ“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Parallel.ForEach, PLINQ“?

Führen Sie Arbeiten mit Parallel.ForEach parallel aus und erstellen Sie parallele Pipelines mit PLINQ (AsParallel, WithDegreeOfParallelism, AsOrdered). Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 3.

Wie lange dauert die Lektion „Parallel.ForEach, PLINQ“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Parallel.ForEach, PLINQ
  2. Producer/Consumer mit Channels (Überblick)
  3. Abwägung zwischen Durchsatz und Latenz
← Zurück zu C# Academy