Task Parallel Library (TPL)

28. Oktober 2015

Wenn man

        • das Einfrieren der Oberfläche verhindern
        • rechenintensive Aufgaben auf mehre CPUs verteilen
        • im Hintergrund auf Events warten

will, kommt man um parallele Verarbeitung nicht herum.

Seit jeher kann man für diese Aufgaben Threads oder besser einen Threadpool verwenden. Nachteilig muss man sich, vor allem bei Threads, um deren Verwaltung kümmern. Mit .NET 4.5 gewann durch async and await die TPL (Task Parallel Library) große Beachtung und Bedeutung. Mit Task wurde die Basis aber bereits in .NET 4.0 gelegt.
Bei beiden Konzepten werden zwar Aufgaben parallel abgearbeitet, aber Tasks bieten eine höheren Abstraktionslevel und mehr Kontrolle.

  • Cancellation von Tasks
  • Load Balancing von Tasks durch Threadunabhängigkeit
  • bessere Performance/Skalierbarkeit von Tasks durch Threadunabhängigkeit

Die Klasse Parallel perfektioniert das Konzept der Tasks noch, indem sie intern die Aufgaben portioniert bzw. partitioniert. Mit nur einem Aufruf nutzt man die Ressourcen ohne viel Aufwand bestens aus.

Parallel.For(

    0, 

    3, 

    i => Console.WriteLine(i));

Parallel.Invoke(

    () => Console.WriteLine(1),

    () => Console.WriteLine(2),

    () => Console.WriteLine(3));

Parallel.ForEach(

    new int[] { 1, 2, 3 },

    i => Console.WriteLine(i));