6. ParalleleProgrammierung – vor .NET 4.0 Synchrones & Asynchrones Threading Nachteil Thread Overhead ThreadPool Geeignetfür Fire and Forget Einmalgestartete Threads könnennichtkontrolliertwerden Nachteile Warten Abbruch Weitermachen Debugging Etc.
7. Von Threads zu Tasks Threads und Tasks sindsehrähnlich Threads erlaubenparalleleAusführunginnerhalbeinesProzesses Symbolisch die Arbeiter des Prozesses Tasks basieren auf Threads Symbolisch die Arbeit die den Arbeiternaufgetragenwird Mit der Task Parallel Library in .NET 4.0 eingeführt
16. Task mit Parameter und Rückgabewert Func Delegat mit Rückgabetyp string und Parameter object staticvoid Main(string[] args) { Func<object, string> Func1 = newFunc<object, string>(Compute); Task<string> Task1 = newTask<string>(Func1, "Parameter1"); Task1.Start(); Console.WriteLine("Result was " + Task1.Result); } staticstring Compute(object Parameter) { Console.WriteLine("Computing with Parameter " + Parameter + "..."); System.Threading.Thread.Sleep(1000); Console.WriteLine("Computing finished..."); return"Result"; } Func dem Task mit Rückgabetyp string zuweisen & Parameter übergeben
17. Lambda Ausdrücke BildenanonymeFunktion die Ausdrücke und Anweisungenenthält Syntax WichtigeOperatoren => “wirdzu” () definiertEingangsparameter {} umschließteineReihe von Anweisungen Werden oft zusammenmit LINQ verwendet Wichtig Lambda Expressions können auf Variablen der einschließendenMethode / Typzugreifen
18. Lambda Ausdrücke Delegat zum speichern der Anonymen Funktion Lambda Ausdruck x wird zu x * x delegateintdel(int i); staticvoid Main(string[] args) { delmyDelegate = x => x * x; int j = myDelegate(5); //j = 25 } Aufruf der Anonymen Funktion mittels Delegat
20. Task Abbruch EinheiklesThemamit Multithreading Ziele Wahren von Teilergebnissen Vermeiden von HolzhammerwieThread.Abort Zuverlässige und sichereAbbruchmethode Tasks werdendurchCancellationTokenbeendet Abbruchwird von CancellactionSourceangefordert, abernichtunbedingtsofortausgeführt GewährleistetsicheresAbbrechen von Tasks ImwesentlichenwieAbortvariable
21. CancellationSource BeinhaltetCancellationToken Threadsicherevom Framework zurVerfügunggestellteAbortvariable Wirdfür Tasks verwendet, kannaberauchfürkonventionelles Threading benutztwerden Aufruf von CancellationSource.CancelsetztCancellationToken.IsCancellationRequested auf true (irreversibel)
23. Exception Handling AggregateExceptionwirdgeworfenwenneineodermehrere Exceptions auftreten Wird an den Thread geleitet der auf den Task joint bzw das Ergebnisabruft Task istCancelled wennOperationCancelledExceptiongeworfenwurde Task ist Faulted wennandere Exceptions geworfenwurden Wichtig! Just My Code unterDebugoptionendeaktivieren
24. Die Parallel Klasse BietetZugriff auf parallelisierteSchleifenund Regionen WichtigeMethoden Parallel.Invoke() Parallel.For() Parallel.ForEach()
28. Schleifenabbrechen ParallelLoopStateliefert die Methoden Stop() Bricht die Iteration so schnellwiemöglichab Break() WartetbisalleIterationen in allen Threads vor der aktuellenIterationenabgeschlossensind und bricht die Iteration dannab, RückgabewertParallelLoopResultliefertInformationenüber das Resultat der Schleife
31. EinfacheParallel.ForEachSchleife List<string> Books = newList<string>{"Die Kreutzersonate", "Anna Karenina", "Krieg und Frieden", "Der Tod des Ivan Illitsch", "Herr und Knecht"}; Parallel.ForEach<string>(Books, (Element) => { Console.WriteLine(Element); }); Iterationselement Collection
32. Von LINQ zu PLINQ LINQ – Language Integrated Query CodekomponentezurAbfrage von Datenquellen PLINQ – Parallel Language Integrated Query Erweiterung des LINQ Befehlssatzes um paralleleElemente
34. Einfacher PLINQ Query Zahlen von 1 bis 10000 var source = Enumerable.Range(1, 10000); varsmallerfiftynumbers = from number insource.AsParallel() where number < 50 select number; Parallele Bearbeitung
35. Reihenfolge & PLINQ Aufgrund von Parallelitätist die Reihenfolgenichtgewährleistet AbhilfeschafftAsOrdered() Verarbeitet parallel Buffert und sortiertEinträge um ursprünglicheReihenfolgezuwahren