Asynchrone Programmierung

In diesem Thema wird die asynchrone Programmierung im Universelle Windows-Plattform (UWP) und deren Darstellung in C#, Microsoft Visual Basic .NET, C++ und JavaScript beschrieben.

Mit asynchroner Programmierung können Sie die Reaktionsfähigkeit Ihrer App bei der Ausführung von zeitintensiven Vorgängen aufrechterhalten. Zum Beispiel muss eine App, die Inhalte aus dem Internet herunterlädt, eventuell mehrere Sekunden warten, bis die Inhalte übermittelt sind. Wenn Sie die Inhalte mit einer synchronen Methode für den UI-Thread abrufen, ist die App so lange blockiert, bis der Methodenaufruf beendet ist. In diesem Zeitraum reagiert die App nicht auf Benutzerinteraktionen, und da sie nicht zu antworten scheint, ist der Benutzer möglicherweise verärgert. Die asynchrone Programmierung eignet sich hier sehr viel besser, denn die App wird weiterhin ausgeführt und reagiert auch auf die UI, während ein anderer Vorgang noch abgeschlossen wird.

Für Methoden, deren Aufruf möglicherweise recht lange dauert, ist die asynchrone Programmierung in der Universellen Windows-Plattform das Standardverfahren. JavaScript, C#, Visual Basic und C++ bieten jeweils Sprachunterstützung für asynchrone Methoden.

Asynchrone Programmierung auf der UWP

Viele UWP-Features, z. B . die MediaCapture-APIs und StorageFile-APIs , werden als asynchrone APIs verfügbar gemacht. Gemäß der Konvention enden die Namen asynchroner APIs auf "Async", um anzugeben, dass ein Teil ihrer Ausführung wahrscheinlich erfolgt, nachdem die Steuerung an den Aufrufer zurückgegeben wurde.

Bei der Verwendung asynchroner APIs in einer UWP-App (Universelle Windows-Plattform) führt der Code einheitlich nicht blockierende Aufrufe aus. Bei Implementierung dieser asynchronen Muster in Ihren API-Definitionen können Aufrufer den Code auf vorhersagbare Weise nachvollziehen und verwenden.

Hier sind einige gängige Aufgaben aufgeführt, für die das Aufrufen asynchroner Windows-Runtime APIs erforderlich ist.

  • Anzeigen von Meldungsdialogfeldern

  • Verwenden des Dateisystems (Anzeigen einer Dateiauswahl)

  • Senden und Empfangen von Daten an das/aus dem Internet

  • Verwenden von Sockets, Streams, Konnektivität

  • Verwenden von Terminen, Kontakten, Kalendern

  • Verwenden von Dateitypen (wie etwa Öffnen von PDF-Dateien oder Decodieren von Bild- oder Medienformaten)

  • Interagieren mit einem Gerät oder Dienst

Mit asynchronen UWP-Mustern können Sie möglicherweise die explizite Verwaltung von Threads gänzlich vermeiden. Jede Programmiersprache unterstützt das asynchrone Muster für die UWP auf spezifische Art und Weise:

Programmiersprache Asynchrone Darstellung
C# async-Schlüsselwort, await-Operator
Visual Basic Asynchrone Schlüsselwort (keyword), Await-Operator
C++/WinRT Coroutine und co_await Operator
C++/CX task-Klasse, .then-Methode
JavaScript zugesagtes Objekt, then-Funktion

Asynchrone Muster auf der UWP mit C# und Visual Basic

Ein typischer Code-Abschnitt in C# oder Visual Basic wird synchron ausgeführt. Das heißt, dass die Ausführung einer Zeile beendet wird, bevor die nächste Zeile ausgeführt wird. Es gab bereits Microsoft .NET-Programmierungsmodelle für eine asynchrone Ausführung, aber der entsprechende Code überbetont die Funktionsweise des asynchronen Codes als solcher gegenüber der Aufgabe, die mit dem Code ausgeführt werden soll. Die Compiler für UWP, .NET Framework, C# und Visual Basic verfügen über erweiterte Features, die die asynchrone Funktionsweise aus dem Code abstrahieren. Für .NET und die UWP können Sie somit asynchronen Code schreiben, der sich auf die Aufgaben und nicht auf die Ausführung als solche konzentriert. Ihr asynchroner Code wird sich nicht großartig von synchronem Code unterscheiden. Weitere Informationen finden Sie unter Aufrufen asynchroner APIs in C# oder Visual Basic.

Asynchrone Muster in UWP mit C++/WinRT

Mit C++/WinRT verwenden Sie Coroutinen und den co_await-Operator . Weitere Informationen und Codebeispiele finden Sie unter Asynchrone Programmierung in C++/WinRT.

Asynchrone Muster in UWP mit C++/CX

In C++/CX basiert die asynchrone Programmierung auf der task-Klasse und deren then-Methode. Die Syntax ist ähnlich aufgebaut wie eine JavaScript-Zusage. Die task-Klasse und die zugehörigen Typen erlauben es außerdem, den Threadkontext abzubrechen und zu verwalten. Weitere Informationen finden Sie unter Asynchrone Programmierung in C++/CX.

Die create_async-Funktion bietet Unterstützung für die Erstellung asynchroner APIs, die von JavaScript oder einer anderen Sprache verwendet werden können, die die UWP unterstützt. Weitere Informationen finden Sie unter Erstellen asynchroner Vorgänge in C++/CX.

Asynchrone Muster in UWP mit JavaScript

In JavaScript basiert die asynchrone Programmierung auf dem vorgeschlagenen Common JS Promises/A-Standard. Dabei werden von asynchronen Methoden zugesagte Objekte zurückgegeben. Zusagen werden sowohl auf der UWP als auch in der Windows-Bibliothek für JavaScript verwendet.

Ein zugesagtes Objekt entspricht einem Wert, der in der Zukunft erfüllt wird. Auf der UWP werden zugesagte Objekte über Factoryfunktionen abgerufen. Die Namen solcher Funktionen enden üblicherweise auf „Async“.

Asynchrone Funktionen können häufig genauso einfach wie konventionelle Funktionen aufgerufen werden. Anders ist nur, dass Sie die then- oder done-Methode verwenden, um die Handler für Ergebnisse oder Fehler zuzuweisen und den Vorgang zu starten.