Asynchrone Programmierung

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

Die Verwendung der asynchronen Programmierung hilft Ihrer App, reaktionsfähig zu bleiben, wenn sie funktioniert, die möglicherweise eine längere Zeit in Anspruch nimmt. Beispielsweise kann eine App, die Inhalte aus dem Internet herunterlädt, mehrere Sekunden warten, bis der Inhalt eingetroffen ist. Wenn Sie eine synchrone Methode im UI-Thread zum Abrufen des Inhalts verwendet haben, wird die App blockiert, bis die Methode zurückgegeben wird. Die App reagiert nicht auf Benutzerinteraktionen, und da sie nicht reaktionsfähig erscheint, kann der Benutzer frustriert werden. Eine wesentlich bessere Möglichkeit besteht darin, eine asynchrone Programmierung zu verwenden, bei der die App weiterhin ausgeführt wird und auf die Benutzeroberfläche reagiert, während sie auf den Abschluss eines Vorgangs wartet.

Bei Methoden, die eine lange Zeit dauern können, ist die asynchrone Programmierung die Norm und nicht die Ausnahme in der UWP. JavaScript, C#, Visual Basic und C++ bieten jeweils Sprachunterstützung für asynchrone Methoden.

Asynchrone Programmierung in der UWP

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

Wenn Sie asynchrone APIs in Ihrer Universelle Windows-Plattform (UWP)-App verwenden, führt Ihr Code nicht blockierende Aufrufe auf konsistente Weise aus. Wenn Sie diese asynchronen Muster in Ihren eigenen API-Definitionen implementieren, können Aufrufer Ihren Code auf vorhersehbare Weise verstehen und verwenden.

Im Folgenden finden Sie einige allgemeine Aufgaben, bei denen asynchrone Windows-Runtime-APIs aufgerufen werden müssen.

  • Anzeigen eines Meldungsdialogfelds

  • Arbeiten mit dem Dateisystem, Anzeigen einer Dateiauswahl

  • Senden und Empfangen von Daten an und aus dem Internet

  • Verwenden von Sockets, Datenströmen, Konnektivität

  • Arbeiten mit Terminen, Kontakten, Kalendern

  • Arbeiten mit Dateitypen, z. B. Öffnen von PDF-Dateien (Portable Document Format) oder Decodieren von Bild- oder Medienformaten

  • Interagieren mit einem Gerät oder einem Dienst

Mit dem asynchronen UWP-Muster können Sie möglicherweise die explizite Verwaltung von Threads überhaupt vermeiden. Jede Programmiersprache unterstützt das asynchrone Muster für die UWP auf eigene Weise:

Programmiersprache Asynchrone Darstellung
C# asynchrones Schlüsselwort, Await-Operator
Visual Basic Async-Schlüsselwort, Await-Operator
C++/WinRT Coroutine und co_await Operator
C++/CX task class, .then method
JavaScript Zusageobjekt, dann Funktion

Asynchrone Muster in UWP mit C# und Visual Basic

Ein typisches Codesegment, das in C# oder Visual Basic geschrieben wurde, wird synchron ausgeführt, d. h. wenn eine Zeile ausgeführt wird, wird sie vor der nächsten Ausführung der Zeile beendet. Es gab frühere Microsoft .NET-Programmiermodelle für die asynchrone Ausführung, aber der resultierende Code neigt dazu, die Mechanik des Ausführens von asynchronen Code hervorzuheben, anstatt sich auf die Aufgabe zu konzentrieren, die der Code auszuführen versucht. Die UWP-, .NET Framework- und C#- und Visual Basic-Compiler verfügen über zusätzliche Features, die die asynchrone Mechanik aus Ihrem Code abstrahieren. Für .NET und die UWP können Sie asynchronen Code schreiben, der sich auf die Funktionsweise des Codes konzentriert, anstatt wie und wann dies zu tun ist. Ihr asynchroner Code sieht relativ ähnlich wie synchronen Code aus. Weitere Informationen finden Sie unter Aufrufen asynchroner APIs in C# oder Visual Basic.

Asynchrone Muster in UWP mit C++/WinRT

Bei 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 Aufgabenklasse und anschließend auf deren Methode. Die Syntax ähnelt der von JavaScript-Zusagen. Die Aufgabenklasse und die zugehörigen Typen bieten auch die Möglichkeit zum Abbruch und zur Verwaltung des Threadkontexts. 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 folgt die asynchrone Programmierung dem common JS Promise/A-Vorgeschlagenen Standard, indem asynchrone Methoden Zusageobjekte zurückgeben. Zusagen werden sowohl in der UWP- als auch in der Windows-Bibliothek für JavaScript verwendet.

Ein Zusageobjekt stellt einen Wert dar, der in Zukunft erfüllt wird. In der UWP erhalten Sie ein Zusageobjekt aus einer Factoryfunktion, die standardmäßig einen Namen hat, der mit "Async" endet.

In vielen Fällen ist das Aufrufen einer asynchronen Funktion fast so einfach wie das Aufrufen einer herkömmlichen Funktion. Der Unterschied besteht darin, dass Sie dann oder die fertige Methode verwenden, um die Handler für Ergebnisse oder Fehler zuzuweisen und den Vorgang zu starten.