150 likes | 425 Views
Was dir Trivialbeispiele in Async and Await nicht sagen !. Marcus Kimpenhaus und Martin Möllenbeck. Agenda. Warum asynchrone Programmierung? Wie hat man dies bisher gelöst? „Async/await “ – das neue Pattern (TAP). Pragmatische Design Pattern für „async/await “ im Entwickler-Alltag.
E N D
Was dirTrivialbeispiele in Async and Await nichtsagen! Marcus Kimpenhaus und Martin Möllenbeck
Agenda • Warum asynchrone Programmierung? • Wie hat man dies bisher gelöst? • „Async/await“ – das neue Pattern (TAP). • Pragmatische Design Pattern für „async/await“ im Entwickler-Alltag.
Warum asynchrone Programmierung? • Responsive UI (Fast & Fluid) • Verbesserung des Datendurchsatz • Optimierung des Thread-Pooling .NET Runtime • Beispiel: Web-Server • Typische Szenarien • Web-Request‘s, I/O, Image-Processing (LRT), Database-Request‘s Beispiel: Das Cafe
Wie hat man dies bisher gelöst? (1) • APM: AsynchronousProgramming Model • BEGIN / END Methoden / IAsyncResult • Callback-Handle (oder Lambda) Weiterführende Links • MSDN-Dokumentation: http://tinyurl.com/osjwtqe
Wie hat man dies bisher gelöst? (2) • EAP: Event-basedAsynchronousPattern • MethodAsync / Completed • Event-Binding Weiterführende Links • MSDN-Dokumentation: http://tinyurl.com/o6ump3u
Wie hat man dies bisher gelöst? (3) • Nachteile APM / EAP • Code-Splittung (APM & EAP) • Bei APM-Lambda keine Splittung aber unleserlich • Event-Binding / Un-Binding (EAP)
„Async/await“ – das neue Pattern (TAP) • Async & await als neue Schlüsselwörter • Task / Task<T> als return Werte • Handling innerhalb einer Methode (Async-Suffix) • Thread-safe Dispatching (auch Exception-Stack) Weiterführende Links • MSDN-Dokumentation: http://tinyurl.com/qabrn56 • Pattern-Dokumentation: http://tinyurl.com/od5p38u • Best Practice Post: http://tinyurl.com/q489p2u
Pragmatische Design Pattern: „async/await“ (1) • Generell • Eine asynchrone Methode ist für das Erzeugen des Task selbst verantwortlich • Task.Run (ThreadPool.Queuing) besser als TaskFactory.StartNew • WebClient und Thread.Delay kapseln dies implizit (schlechte Beispiele ) • Bei Parallelisierung Task.WhenAll zur Task-Synchronisation • async all theway
Pragmatische Design Pattern: „async/await“ (2) • UI • Entkopplung innerhalb des View-Models • 2 Methoden • 1 Binding an ActionCommand (synchron) • 1 AsyncExecuter ( Unit-Testing)
Pragmatische Design Pattern: „async/await“ (3) • API • Alle Schichten Nur ausgewählte Schichten (TCP, I/O, …) ? • Progress-Reporting / Cancellation • Unit-Testing • Deklaration:async Task TestMethod • Im Test: awaitFunctionUnderTest();
Und jetzt noch… • GitHub Link zu den Samples: • https://github.com/5minds/fe_async_await • Download-Link zur Präsentation • http://www.5minds.de/assets/attachments/2014_freelancer_1_async_await_kimpenhaus_moellenbeck.ppt
Fertig! Fragen? Jetzt oder später: buero@5Minds.de