asynchrone programmierung mit c# - thomas claudius huber · pdf filethomas claudius huber...
TRANSCRIPT
![Page 1: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/1.jpg)
Thomas Claudius Huber
Asynchrone
Programmierung mit C#
![Page 2: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/2.jpg)
Thomas Claudius Huber
• Principal Consultant @ Trivadis AG
Trainer, Coach, Developer, Architect
www.thomasclaudiushuber.com
• Spezialisiert auf WPF, XAML, WinApps
• Autor der umfassenden Handbücher
zu WPF, Silverlight und
Windows Store Apps
![Page 3: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/3.jpg)
Sessioninhalt Tasks und async & await
Progress, Cancellation & more
.NET vs. WinRT
![Page 4: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/4.jpg)
Asynchron in .NET
• «Asynchronous Programming Model» (APM)
• BeginInvoke und EndInvoke
– AsyncCallback und IAsyncResult
• Bekannt von Streams und Sockets
![Page 5: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/5.jpg)
Asynchron in .NET
• «Event-based asynchronous pattern» (EAP)
– kam in .NET 2.0
• Zu einer [...]Async-Methode gibt es ein
[...]Completed-Event
– bspw. LoadAsync und LoadCompleted
![Page 6: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/6.jpg)
Event-based asynchronous
pattern
private static void EventBasedAsynchronousPattern()
{
var wc = new WebClient();
wc.DownloadStringCompleted += (sender, eventArgs) =>
{
string html = eventArgs.Result;
// ...
};
wc.DownloadStringAsync(
new Uri("http://www.thomasclaudiushuber.com"));
}
![Page 7: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/7.jpg)
.NET 4.0 – Task Parallel
Library• Neuer Namespace System.Threading.Tasks
• Task lässt sich auf neuem Thread starten
– Task.Factory.StartNew
Demo
![Page 8: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/8.jpg)
Verschiedene Funktionen
• Warten bis der Task fertig ist
– myTask.Wait();
– Task.WaitAll(params Task[] tasks);
– Task.WaitAny(params Task[] tasks);
• Task verzögern
– Task.Delay (.NET 4.5)
• Task mit Action fortsetzen
– myTask.ContinueWith(Action action);
![Page 9: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/9.jpg)
Task-based
asynchronous pattern (TAP)• Baut auf Task Parallel Library (TPL) auf
• Sprachunterstützung in C# und VB.NET
– async und await
• Verfügbar für verschiedene Microsoft-Platformen
– Web, Desktop, WinRT etc.
![Page 10: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/10.jpg)
Asynchrone Methoden
• Nutzen das async Schlüsselwort
– enden konventionsgemäss auf “Async”
• Geben die Kontrolle an den Aufrufer zurück
• Haben üblicherweise mindestens
eine “await”-Anweisung
Demo
![Page 11: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/11.jpg)
Rückgabetypen
asynchroner Methoden• void – der Aufrufer benötigt keine Info
– wird nur für EventHandler verwendet
• Task – der Aufrufer erhält Info zum Task-Zustand
– bspw. ob der Task «completed» ist
• Task<T> - neben dem Task-Zustand erhält der
Aufrufer den Rückgabewert
Demo
![Page 12: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/12.jpg)
Asynchron vs. Multithreading
• CPU-lastiges in neuen Thread auslagern
– Task.Run / Task.Factory.StartNew
• Für andere APIs wird kein neuer Thread erstellt, sie
sind jedoch asynchron:
– bspw. WebClient-Klasse und deren
DownloadStringTaskAsync-Methode
![Page 13: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/13.jpg)
Was passiert im Hintergrund
• await/async sind für den Compiler
• async markiert eine Methode, die der Compiler
ändert
• In der Methode wird eine Art Statemachine generiert
– basiert auf einer TaskAwaiter-Instanz
Demo
![Page 14: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/14.jpg)
Sessioninhalt Tasks und async & await
Progress, Cancellation & more
.NET vs. WinRT
![Page 15: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/15.jpg)
Fortschritt / Progress
• Async-Methode nimmt IProgress<T> entgegen
• Aufrufer gibt eine Progress<T>-Instanz an
• Progress<T> kapselt Action als Callback
Demo
![Page 16: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/16.jpg)
Abbruch eigener Async-
Methoden• Als Parameter ein CancellationToken
entgegennehmen
• Die IsCancellationRequested-Property prüfen und
die Methode verlassen
– vorher kann Cleanup stattfinden
• Alternativ die ThrowIfCancellationRequested-
Methode nutzen
Demo
![Page 17: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/17.jpg)
Tasks abbrechen
• CancellationTokenSource erstellen
• Wert der Token-Property (CancellationToken) an
Async-Methode übergeben
• Auf CancellationTokenSource die Cancel-Methode
aufrufen
Demo
![Page 18: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/18.jpg)
Exceptions
• Eine await-Anweisung kann in einen try/catch-Block
gepackt werden.
• Im asynchronen Code geworfene Exceptions werden
somit beim await im catch-Block abgefangen
Demo
![Page 19: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/19.jpg)
Sessioninhalt Tasks und async & await
Progress, Cancellation & more
.NET vs. WinRT
![Page 20: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/20.jpg)
User Interfaces
• Synchrone Eventhandler blockieren das UI
• Touch gegenüber Maus/Tastatur hochempfindlich
– Verzeiht keine Verzögerungen
• WinRT => alles was länger als 50ms dauern
könnte, ist nur asynchron verfügbar
![Page 21: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/21.jpg)
.NET vs. WinRT
.NET
Task
Task<T>
WinRT
IAsyncAction
IAsyncOperation
IAsyncActionWithProgress
IAsyncOperationWithProgress
Demo
![Page 22: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/22.jpg)
Cancellation & Progress
• IAsyncOperationWithProgress mit AsTask-Extension-
Methode in Task umwandeln
• Extension-Methode nimmt IProgress<T> und
CancellationToken entgegen
• .NET-Knowhow lässt sich wiederverwenden.
![Page 23: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/23.jpg)
Sessioninhalt Tasks und async & await
Progress, Cancellation & more
.NET vs. WinRT
![Page 24: Asynchrone Programmierung mit C# - Thomas Claudius Huber · PDF fileThomas Claudius Huber • Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect • Spezialisiert](https://reader034.vdocuments.net/reader034/viewer/2022051523/5a78d4c07f8b9a70238d1479/html5/thumbnails/24.jpg)
Danke
Twitter: @thomasclaudiush
Homepage: www.thomasclaudiushuber.com
Mail: [email protected]
Slides/Demos:
www.thomasclaudiushuber.com/blog