Die bisherigen Versionen des .NET Frameworks erforderten von Entwicklern viel Eigeninitiative, wenn er Methoden asynchron nutzen wollte oder bereitstellen musste. Mit .NET 4.5 haben neue Schlüsselworte Einzug in das Framework gehalten, die den Aufwand für asynchrone Programmierung deutlich vereinfacht.
Im .NET 4.5 Framework (wie auch in der Windows Runtime) enthalten viele Basisklassen bereits Methoden für die asynchrone Programmierung. So kann zum Beispiel über Klassen wie HTTPClient, Socket, StreamWriter, XMLReader asynchron mit dem Dateisystem, Sockets oder dem Web gearbeitet werden. Asynchrone Methoden lassen sich am Suffix Async im Methodennamen erkennen. Und mit den zwei neuen Schlüsselwörtern async und await lässt sich asynchron ähnlich komfortabel programmieren wie synchron.
Über das Schlüsselwort async im Methodenkopf kennzeichnet der Entwickler eine Methode als asynchron. Innerhalb der Methode werden die asynchronen Methoden z.B. aus den .NET Basisklassen aufgerufen. Mit dem vorangestellten Schlüsselwort await wird dem Compiler der Hinweis gegeben, dass auf die Rückkehr der Methoden gewartet werden soll (siehe Abbildung 1).
Wird die Methode ReadApplicationConfig aus der Anwendung aufgerufen, so wird ein Puffer angelegt und die Methode ReadAsync zum Starten der asynchronen Leseoperation aufgerufen. Diese Methode kehrt sofort mit einem Task Objekt zurück, welches die laufende asynchronen Leseoperation symbolisiert und die Anweisungen innerhalb der ReadApplicationConfig Methode könnte weiter abgearbeitet werden. Durch das Schlüsselwort await ist hinterlegt, dass die Methode die ihrerseits auf die Ergebnisse im Puffer warten muss. Daher wird die Ausführung der Methode unterbrochen und die Anwendung kann weiterarbeiten. Sobald die Leseoperation abgeschlossen ist, wird die Ausführung der Methode ReadApplicationConfig fortgesetzt und die Konfiguration kann ausgewertet werden.
Bei der Kompilierung erstellt der Compiler automatisch eine Zustandsmaschine (Async State Maschine) und erzeugt den Code zum Anhalten und zur weiteren Ausführung der ReadApplicationConfig Methode (siehe Abbildung 2).
Um eigene Methoden asynchron bereit zu stellen, muss statt dem Rückgabewerttyps ein Task mit dem Rückgabetyp als Typ (Task<T>) zurückgegeben werden. Bei der Benennung der Methode sollte darauf geachtet werden, dass der Name auf Async endet.
Weiterhin kann über die Methode Task.Run die parallele Ausführung von Aktivitäten über zusätzliche Threads erreicht werden. Für weitere Informationen sei auf die MSDN und die Dokumentation der Task Klasse verwiesen.
Für asynchrone Operationen in Applikationen auf .NET 4.5 Basis und Windows Store Apps ist eine native Unterstützung im .NET 4.5 Framework vorhanden. Für .NET 4.0 und Silverlight 5 Applikationen kann über das Async Targeting Pack eine Unterstützung für die Entwicklung im Visual Studio 2012 nach installiert werden.
Die neue Funktionalität zur asynchronen Programmierung im .NET Framework 4.5 bietet eine deutliche Vereinfachung. Entwickler können sich auf das Schreiben der Anwendungslogik konzentrieren, da nun der Compiler die asynchrone Umsetzung für sie übernimmt. Diese Weiterentwicklung der verwendeten Technologien ermöglichen es Entwicklern mit wenig Aufwand ihre Effizienz zu steigern.