Hallo!
Der Vorteil, dass die TPL die Verwaltung übernimmt, ist nicht zu unterschätzen. Damit musst Du Dich nämlich nicht drum kümmern, was die optimale Anzahl an Threads ist. Ich schreibe in letzter Zeit an einem Programm, welches ich auf einem Dualcore entwickle und auf einem Hexacore dann rechnen lasse. Da unterscheidet sich ja dann schon die optimale Anzahl an Threads. Das kann man natürlich auch selber ausknobeln, aber praktischer ist es, das die TPL machen zu lassen.
Auffällig wird das, wenn man Schleifen parallelisiert. Will man das selber machen, würde man den von der Schleife abgedeckten Bereich an Indizizes in so viele Teilbereiche unterteilen, wie es Prozessoren gibt und jeden der Teilbereiche in einem eigenen Thread rechnen lassen. Das wird dann nicht nur sehr viel schwerer lesbar, sondern man muss sich auch selber drum kümmern, dass der Hauptthread wartet bis die anderen Threads fertig sind, und vielleicht auch schauen, dass wen ein Thread schneller fertig ist als der andere, der noch ein paar Aufgaben übernehmen kann. Insbesondere der letzte Teil ist nicht trivial.
Das sieht in der TPL dann einfacher aus. Aus
C#-Quelltext
1: 2: 3: 4:
| for(int i = 0; i < count; i++) { } |
wird
C#-Quelltext
1: 2: 3: 4:
| Parallel.For(0, count, i => { }); |
Und Du bist alle diese Sorgen los

Und es skaliert meiner Erfahrung nach wirklich hervorragend!
Als Fazit kann man wohl sagen: Die TPL nimmt Dir Arbeit ab, macht die Arbeit wahrscheinlich besser, als man selber das mit annehmbaren Aufwand kann und führt zu besser lesbarem Code. Was will man mehr
Grüße
Christian
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".