Alles flüssig mit async/await
Kommentare

Wer ein Gerät per Touch anstelle von Maus und Tastatur bedient, ist hochempfindlich gegenüber Verzögerungen im UI. Schließlich lässt der direkte Kontakt mit den Oberflächenelementen erwarten, dass bei einer Aktion direkt etwas passiert. Doch auch auf dem klassischen Desktop sind lange Reaktionszeiten mehr als nur nervig – sie können sogar zu einem echten K.O.-Kriterium für eine Software werden.

Hinter langen Reaktionszeiten stecken in vielen Fällen synchrone EventHandler, die das UI blockieren. Im Umkehrschluss kann eine asynchrone Vorgehensweise in der Programmierung Abhilfe schaffen und das User Interface wieder zum flüssigen Laufen bringen. Wie das funktioniert, hat Thomas Claudius Huber (Trivadis AG) in seiner Session „Fluid User Interfaces with async/await“ auf der BASTA! 2014 demonstriert.

async/await für flüssige User Interfaces

Die erste Session am Konferenzdonnerstag eröffnete Huber mit einem kurzen Überblick über die Geschichte der asynchronen Programmierung in .NET. In der ersten Version des Frameworks gab es das Asynchronous Programming Model mit BeginInvoke und EndInvoke, AsyncCallback und IAsyncResult. Mit .NET 2.0 wurde dann das Event-based Asynchronous Pattern eingeführt, bei dem es zu einer Async-Methode immer auch ein Completed-Event gab. Seit .NET 4.0 haben wir es nun mit der Task Parallel Library und ihrer Abstraktion über klassische Threading-Klassen zu tun.

Dabei gibt es folgende Rückgabetypen asynchroner Methoden:

  • void wird ausschließlich für EventHandler verwendet, hier benötigt der Aufrufer keine weiteren Informationen.
  • Mit Task erhält der Aufrufer Informationen zum Task-Zustand und erfährt beispielsweise, ob dieser completed ist.
  • Task gibt neben dem Task-Zustand auf den Rückgabewert vom Typ T an.

Die Funktionsweise der Task Parallel Library zeigte Huber anhand einer einfachen WPF-Applikation und eines anschließenden Unit Tests, für den nur noch der DelegateCommand angepasst werden musste. In diesem Zuge erklärte er auch den Unterschied zwischen Asynchronität und Multithreading: Während Asynchronität durchaus ohne Multithreading funktioniert, ist Multithreading selbst immer asynchron.

Die prinzipielle Notwendigkeit eines flüssigen UI können wir wohl alle nachvollziehen. Dass benutzerfreundliche Oberflächen dank der asynchronen Programmierung gar nicht mal so schwer zu implementieren sind, hat Thomas Claudius Huber in seiner BASTA!-Session eindrucksvoll vorgeführt. So können wir Ihnen nur raten, dass auch Sie seinen Empfehlungen folgen und async/await selbst einmal ausprobieren sollten.

Aufmacherbild: Abstract landscape of the Presque Isle River rapids von Shutterstock / Urheberrecht: Dean Pennala

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -