Meine Folien und Beispiele zur heutigen Session "Parallele Applikationen mit .Net 4 (TPL)" sind nun online.
Nachfolgend finden sich noch Antworten auf die beiden in der Session offene gebliebenen Punkte.
Frage: Warum war mein Laptop nach der Parallelisierung mehr als doppelt so schnell obwohl er nur zwei Kerne hat.
Antwort: Ich habe zum Simulieren einer aufwendigen Aktion die Klasse SpinWait verwendet. Diese führt jedoch, wie der Name suggeriert, nicht nur Spinning durch sonder eine Kombination aus Spinning und Yielding (Thread schlafen legen).
Frage: Warum hat das Beispiel mit ContinueWith nicht funktioniert.
Antwort: Im Grunde war es eine Kleinigkeit. Anstatt
Task<Pizza> task =
Task
.Factory
.StartNew<Pizza>(
() => PreparePizza()
)
.ContinueWith((t) => DeliverPizza(t.Result));
muss es (in BATA 2 !!) wie folgt formuliert werden:
Task<Pizza> task =
Task
.Factory
.StartNew<Pizza>(
() => PreparePizza()
);
Task task2 = task.ContinueWith((t) => DeliverPizza(t.Result));
Update: Hab' es am Wochenende mit dem RC ausprobiert. Der gibt sich wieder mit der in der Session verwendeten "Fluent"-Schreibweise (erstes Beispiel, oben) zufrieden ...