Meilleures pratiques pour l’utilisation du pool de threads

Cette rubrique décrit les meilleures pratiques relatives à l’utilisation du pool de threads.

Pratiques conseillées

  • Utilisez le pool de threads pour effectuer des tâches parallèles dans votre application.

  • Utilisez des éléments de travail pour accomplir des tâches étendues sans bloquer le thread d’interface utilisateur.

  • Créez des éléments de travail qui sont de courte durée et indépendants. Les éléments de travail s’exécutent de manière asynchrone et peuvent être envoyés au pool dans n’importe quel ordre à partir de la file d’attente.

  • Distribuez les mises à jour du thread d’interface utilisateur avec Windows.UI.Core.CoreDispatcher.

  • Utilisez ThreadPoolTimer.CreateTimer au lieu de la fonction Sleep .

  • Utilisez le pool de threads au lieu de créer votre propre système de gestion des threads. Le pool de threads s’exécute au niveau du système d’exploitation avec une fonctionnalité avancée et est optimisé pour être mis à l’échelle dynamiquement en fonction des ressources et de l’activité de l’appareil au sein du processus et sur l’ensemble du système.

  • En C++, assurez-vous que les délégués d’élément de travail utilisent le modèle de thread agile (les délégués C++ sont agiles par défaut).

  • Utilisez des éléments de travail pré-alloués lorsque vous ne pouvez pas tolérer un échec d’allocation de ressources au moment de l’utilisation.

À ne pas faire

  • Ne créez pas de minuteurs périodiques avec une valeur de période de <1 milliseconde (y compris 0). Cela entraîne le comportement de l’élément de travail en tant que minuteur à un seul coup.

  • N’envoyez pas d’éléments de travail périodiques qui prennent plus de temps que le temps que vous avez spécifié dans le paramètre de période .

  • N’essayez pas d’envoyer les mises à jour de l’interface utilisateur (autres que les toasts et les notifications) à partir d’un élément de travail distribué à partir d’une tâche en arrière-plan. Utilisez plutôt des gestionnaires de progression et d’achèvement des tâches en arrière-plan, par exemple IBackgroundTaskInstance.Progress.

  • Lorsque vous utilisez des gestionnaires d’éléments de travail qui utilisent le mot clé asynchrone , ne supposez pas que tout le code du gestionnaire a été exécuté lorsque l’état complet a été défini sur l’élément de travail. L’élément de travail du pool de threads peut être défini sur l’état complet avant l’exécution de l’ensemble du code dans le gestionnaire. Le code suivant un mot clé await dans le gestionnaire peut s’exécuter une fois que l’élément de travail a été défini sur l’état complet.

  • N’essayez pas d’exécuter un élément de travail pré-alloué plusieurs fois sans le réinitialiser. Créer un élément de travail périodique