Utilisation de la bibliothèque de programmation asynchrone

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation de la RTL dans les applications multi-périphériques


La RTL fournit la Bibliothèque de programmation asynchrone (Asynchronous Programming Library ou APL). L'APL tire parti de la PPL pour la prise en charge des opérations asynchrones au sein de TComponent. Le multithreading vous permet déjà de personnaliser manuellement la gestion de vos applications de façon asynchrone. Toutefois, l'APL facilite considérablement cette tâche dans la mesure où la prise en charge de la programmation asynchrone est incorporée dans un composant.

Présentation de l'APL

L'APL fournit la classe de base TBaseAsyncResult pour la prise en charge des appels asynchrones. Cela simplifie la gestion des parties asynchrones de votre application de la façon suivante :

  • Vous pouvez gérer le comportement d'un appel asynchrone à une méthode cible. Vous pouvez notamment sélectionner où planifier un appel asynchrone en vue de son exécution :
Remarque : Si vous ne spécifiez rien, l'appel s'exécute de façon synchrone dans le thread principal par défaut.

Alors que la méthode cible s'exécute dans un thread en arrière-plan, l'appelant original est capable de continuer à travailler en parallèle sur d'autres tâches synchrones. Lorsque la méthode cible a terminé de traiter ses tâches, elle renvoie le résultat au thread de l'appelant.

Remarque : Si vous planifiez un appel à une méthode cible dans un descendant du thread de l'appelant, cette méthode cible ne fonctionne pas de façon asynchrone dans la mesure où le thread de l'appelant la traite dans son intégralité.

Comment utiliser l'APL

Pour pouvoir utiliser les opérations asynchrones, vous devez préalablement :

  • Inclure un TComponent afin de prendre en charge la programmation asynchrone.
  • Utiliser l'interface IAsyncResult pour accéder aux fonctionnalités que TBaseAsyncResult fournit pour implémenter la programmation asynchrone.
  • Appeler la méthode BeginInvoke pour démarrer un appel asynchrone vers une méthode cible. Vous pouvez gérer le thread où l'appel de méthode cible s'exécute. Le thread en cours continue de travailler normalement jusqu'à ce que IAsyncResult termine l'exécution de la méthode cible et renvoie les résultats de la méthode asynchrone à l'appelant.
  • Appeler la méthode EndInvoke pour qu'elle attende la fin de l'exécution de IAsyncResult. Vous devez appeler EndInvoke pour chaque appel à BeginInvoke.
  • Vous pouvez inclure une méthode callback dans l'appel à BeginInvoke. Ainsi, la méthode callback est appelée quand l'exécution de la méthode cible est terminée. Si vous procédez ainsi, vous pouvez appeler EndInvoke au sein du callback afin d'obtenir les résultats. Sinon, vous pouvez appeler EndInvoke dans le thread de l'appelant comme indiqué précédemment.

Voir aussi