Partager via


Programmation asynchrone

Cette rubrique décrit la programmation asynchrone dans le plateforme Windows universelle (UWP) et sa représentation en C#, Microsoft Visual Basic .NET, C++et JavaScript.

L’utilisation de la programmation asynchrone permet à votre application de rester réactive lorsqu’elle effectue un travail qui peut prendre un certain temps. Par exemple, une application qui télécharge du contenu à partir d’Internet peut passer plusieurs secondes en attente de l’arrivée du contenu. Si vous avez utilisé une méthode synchrone sur le thread d’interface utilisateur pour récupérer le contenu, l’application est bloquée jusqu’à ce que la méthode retourne. L’application ne répond pas à l’interaction de l’utilisateur et, parce qu’elle semble non réactive, l’utilisateur peut devenir frustré. Une meilleure façon consiste à utiliser la programmation asynchrone, où l’application continue à s’exécuter et à répondre à l’interface utilisateur pendant qu’elle attend la fin d’une opération.

Pour les méthodes qui peuvent prendre beaucoup de temps, la programmation asynchrone est la norme et non l’exception dans UWP. JavaScript, C#, Visual Basic et C++ fournissent chacune une prise en charge du langage pour les méthodes asynchrones.

Programmation asynchrone dans UWP

De nombreuses fonctionnalités UWP, telles que les API MediaCapture et les API StorageFile, sont exposées en tant qu’API asynchrones. Par convention, les noms des API asynchrones se terminent par « Async » pour indiquer qu’une partie de leur exécution est susceptible d’avoir lieu une fois le contrôle retourné à l’appelant.

Lorsque vous utilisez des API asynchrones dans votre application plateforme Windows universelle (UWP), votre code effectue des appels non bloquants de manière cohérente. Lorsque vous implémentez ces modèles asynchrones dans vos propres définitions d’API, les appelants peuvent comprendre et utiliser votre code de manière prévisible.

Voici quelques tâches courantes qui nécessitent l’appel d’API Windows Runtime asynchrones.

  • Affichage d’une boîte de dialogue de message

  • Utilisation du système de fichiers, affichage d’un sélecteur de fichiers

  • Envoi et réception de données vers et depuis Internet

  • Utilisation de sockets, de flux, de connectivité

  • Utilisation de rendez-vous, de contacts, de calendrier

  • Utilisation de types de fichiers, tels que l’ouverture de fichiers PDF (Portable Document Format) ou le décodage d’images ou de formats multimédias

  • Interaction avec un appareil ou un service

Avec le modèle asynchrone UWP, vous pouvez éviter de gérer explicitement les threads. Chaque langage de programmation prend en charge le modèle asynchrone pour UWP de sa propre manière :

Langage de programmation Représentation asynchrone
C# mot clé async, opérateur await
Visual Basic Mot clé Async, opérateur Await
C++/WinRT coroutine et opérateur co_await
C++/CX classe task, méthode .then
JavaScript objet promise, puis fonction

Modèles asynchrones dans UWP à l’aide de C# et Visual Basic

Un segment classique de code écrit en C# ou Visual Basic s’exécute de manière synchrone, ce qui signifie que lorsqu’une ligne s’exécute, elle se termine avant l’exécution de la ligne suivante. Il y a eu des modèles de programmation Microsoft .NET précédents pour l’exécution asynchrone, mais le code résultant a tendance à mettre en évidence la mécanique de l’exécution du code asynchrone au lieu de se concentrer sur la tâche que le code tente d’accomplir. Les compilateurs UWP, .NET Framework et C# et Visual Basic ont ajouté des fonctionnalités qui extrayent les mécanismes asynchrones de votre code. Pour .NET et UWP, vous pouvez écrire du code asynchrone qui se concentre sur ce que fait votre code au lieu de savoir comment et quand le faire. Votre code asynchrone ressemblera raisonnablement au code synchrone. Pour plus d’informations, consultez Appeler des API asynchrones en C# ou Visual Basic.

Modèles asynchrones dans UWP avec C++/WinRT

Avec C++/WinRT, vous utilisez des coroutines et l’opérateur co_await. Pour plus d’informations et des exemples de code, consultez programmation asynchrone en C++/WinRT.

Modèles asynchrones dans UWP avec C++/CX

En C++/CX, la programmation asynchrone est basée sur la classe de tâches, puis sa méthode. La syntaxe est similaire à celle des promesses JavaScript. La classe de tâches et ses types associés fournissent également la fonctionnalité d’annulation et de gestion du contexte de thread. Pour plus d’informations, consultez Programmation asynchrone en C++/CX.

La fonction create_async prend en charge la production d’API asynchrones qui peuvent être consommées à partir de JavaScript ou d’un autre langage prenant en charge UWP. Pour plus d’informations, consultez Création d’opérations asynchrones en C++/CX.

Modèles asynchrones dans UWP à l’aide de JavaScript

En JavaScript, la programmation asynchrone suit la norme proposée par Common JS Promises/A en ayant des méthodes asynchrones renvoyant des objets de promesse. Les promesses sont utilisées dans la bibliothèque UWP et Windows pour JavaScript.

Un objet de promesse représente une valeur qui sera remplie à l’avenir. Dans UWP, vous obtenez un objet de promesse à partir d’une fonction de fabrique, qui, par convention, a un nom qui se termine par « Async ».

Dans de nombreux cas, l’appel d’une fonction asynchrone est presque aussi simple que l’appel d’une fonction conventionnelle. La différence est que vous utilisez la méthode puis ou terminée pour affecter les gestionnaires pour les résultats ou les erreurs et pour démarrer l’opération.