Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

Utilisation de la fenêtre Tâches

 

La fenêtre Tâches ressemble à la fenêtre Threads, excepté qu'elle affiche des informations sur les objets System.Threading.Tasks.Task, task_handle ou WinJS.Promise, et non pas sur chaque thread. Comme les threads, les tâches représentent des opérations asynchrones qui peuvent s'exécuter simultanément. Toutefois, plusieurs tâches peuvent s'exécuter sur le même thread. Pour plus d'informations, consultez Programmation asynchrone dans JavaScript (Applications du Windows Store).

Le code managé vous permet d'utiliser la fenêtre Tâches lorsque vous travaillez avec des objets System.Threading.Tasks.Task ou avec les mots clés await et async (Await et Asynchrone en Visual Basic). Pour plus d'informations sur les tâches en code managé, consultez Parallel Programming in the .NET Framework.

En code natif, vous pouvez utiliser la fenêtre Tâches lorsque vous travaillez avec des groupes de tâches, des algorithmes parallèles, des agents asynchrones et des tâches légères. Pour plus d'informations sur les tâches en code natif, consultez Concurrency Runtime.

En JavaScript, vous pouvez utiliser la fenêtre Tâches lorsque vous utilisez le code .then.

Vous pouvez utiliser la fenêtre Tâches chaque fois que l'exécution s'arrête dans le débogueur. Pour y accéder, cliquez sur Fenêtres dans le menu Déboguer, puis cliquez sur Tâches. L'illustration suivante présente la fenêtre Tâches dans son mode par défaut.

Fenêtre Tâches parallèles
System_CAPS_noteRemarque

En code managé, Task qui a un état Created, WaitingForActivation ou WaitingToRun, ne peut pas s'afficher dans la fenêtre Tâches lorsque les threads managés sont à l'état de veille ou à l'état de jonction.

Les colonnes de la fenêtre Tâches contiennent les informations suivantes.

Nom de la colonne

Description

Indicateurs

Affiche les tâches avec indicateur et vous permet d'ajouter un indicateur à une tâche ou d'en supprimer un.

Icônes

La flèche jaune indique la tâche actuelle. La tâche actuelle est la tâche supérieure du thread actuel.

Une flèche blanche indique la tâche d'arrêt, autrement dit, celle qui était actuelle lorsque le débogueur a été appelé.

L'icône de pause indique une tâche gelée par l'utilisateur. Vous pouvez geler et libérer une tâche en cliquant dessus avec le bouton droit dans la liste.

ID

Numéro fourni par le système pour la tâche. En code natif, il s'agit de l'adresse de la tâche.

État

État actuel (planifié, actif, bloqué, en attente ou terminé) de la tâche. Une tâche planifiée est une tâche qui n'a pas encore été exécutée et, par conséquent, qui de possède pas encore une pile d'appels, un thread assigné ou des informations connexes.

Une tâche active est une tâche qui était en train d'exécuter du code avant de s'arrêter dans le débogueur.

Une tâche en attente est une tâche bloquée qui attend le signal d'un événement, la libération d'un verrouillage ou la fin d'une autre tâche.

Une tâche bloquée est une tâche en attente dont le thread est bloqué par un autre thread.

Pointez sur la cellule État d'une tâche bloquée ou en attente pour obtenir plus d'informations sur le blocage.

System_CAPS_warningAvertissement

La fenêtre Tâches signale les interblocages uniquement pour les tâches bloquées utilisant une primitive de synchronisation prise en charge par le parcours du type d'attente (WCT). Par exemple, pour un objet Task bloqué qui utilise le WCT, le débogueur signale Attente bloquée. Pour une tâche bloquée gérée par le runtime d'accès concurrentiel qui n'utilise pas Wait Chain Traversal, le débogueur signale En attente. Pour plus d'informations sur WCT, consultez Wait Chain Traversal.

Heure de début

Heure à laquelle la tâche est devenue active.

Durée

Nombre de secondes durant lesquelles la tâche a été active.

Heure de fin

Heure à laquelle la tâche s'est terminée.

Emplacement

Emplacement actuel dans la pile d'appels de la tâche. Pointez sur cette cellule pour visualiser l'ensemble de la pile des appels de la tâche. Les tâches planifiées ne disposent pas de valeur dans cette colonne.

Tâche

Méthode initiale et tous les arguments passés à la tâche lorsqu'elle a été créée.

Parent

ID de la tâche qui a créé cette tâche. Si rien n'est indiqué, la tâche n'a aucun parent. Ceci s'applique uniquement aux programmes gérés.

Assignation de thread

ID et nom du thread sur lequel la tâche s'exécute.

État de retour

État de la tâche lorsqu'elle est terminée. Les valeurs d'état de retour sont Opération réussie, Annulé et Erreur.

AppDomain

Pour du code managé, domaine d'application dans lequel la tâche s'exécute.

task_group

Pour du code natif, adresse de l'objet task_group qui a planifié la tâche. Pour les agents asynchrones et les tâches légères, cette colonne a la valeur 0.

Processus

ID du processus que la tâche exécute.

État asynchrone

En matière de code managé, état de la tâche. Par défaut, cette colonne est masquée. Pour afficher cette colonne, ouvrez le menu contextuel pour l'une des en-têtes de colonnes. Sélectionnez Colonnes, AsyncState.

Vous pouvez ajouter des colonnes à la vue en cliquant avec le bouton droit sur un en-tête de colonne et en sélectionnant ensuite les colonnes souhaitées. (Supprimez des colonnes en effaçant les sélections.) Vous pouvez également réorganiser les colonnes en les faisant glisser à gauche ou à droite. Le menu contextuel des colonnes est présenté dans l'illustration suivante.

Menu de la vue Raccourci dans la fenêtre Tâches parallèles

Pour trier des tâches en fonction des critères de colonne, cliquez sur l'en-tête d'une colonne. Par exemple, si vous cliquez sur l'en-tête de colonne ID, vous pouvez trier les tâches en fonction de leur ID : 1, 2, 3, 4, 5, etc. Pour inverser l'ordre de tri, cliquez à nouveau sur l'en-tête de la colonne. La colonne et l'ordre de tri actuels sont indiqués par une flèche dans la colonne.

Vous pouvez regrouper des tâches en fonction d'une colonne de la vue Liste. Ainsi, lorsque vous cliquez avec le bouton droit sur l'en-tête de colonne État et que vous cliquez ensuite sur Grouper par État, vous pouvez regrouper toutes les tâches possédant le même état. Par exemple, vous pouvez visualiser rapidement les tâches en attente afin de vous concentrer sur la raison de leur blocage. Vous pouvez également réduire un groupe qui ne présente pas d'intérêt pour la session de débogage. De la même manière, vous pouvez regrouper les tâches en fonction des autres colonnes. Pour ajouter un indicateur à un groupe (ou en supprimer un), il suffit de cliquer sur le bouton en regard de l'en-tête de groupe. L'illustration suivante présente la fenêtre Tâches en mode regroupé.

Mode groupé dans la fenêtre Tâches parallèles

(cette vue est uniquement disponible pour le code managé) En cliquant avec le bouton droit sur un en-tête de colonne et en cliquant ensuite sur Vue Parent enfant, vous pouvez transformer la liste de tâches en une vue hiérarchique, au sein de laquelle chaque tâche enfant constitue un sous-nœud qui peut être affiché ou masqué sous son parent. L'illustration suivante présente les tâches au sein de la vue parent-enfant.

Vue parent-enfant dans la fenêtre Tâches parallèles

Vous pouvez marquer le thread sur lequel une tâche s'exécute en sélectionnant la tâche, puis en choisissant Marquer dans le menu contextuel, ou en cliquant sur l'icône d'indicateur dans la première colonne. Si vous signalez plusieurs tâches, vous pouvez ensuite effectuer un tri sur la colonne d'indicateur pour déplacer toutes les tâches avec indicateur vers le haut afin de pouvoir vous concentrer uniquement sur celles-ci. Vous pouvez également utiliser la fenêtre Piles parallèles pour afficher uniquement les tâches avec indicateur. Cela vous permet d'éliminer par filtrage les tâches qui ne vous intéressent pas pour le débogage. Les indicateurs ne sont pas persistants entre les sessions de débogage.

Vous pouvez geler le thread sur lequel une tâche s'exécute en cliquant avec le bouton droit sur la tâche, puis en cliquant sur Verrouiller le thread affecté. (Si une tâche est déjà gelée, la commande s'intitule Libérer le thread affecté.) Lorsque vous gelez un thread, celui-ci ne s'exécute pas lorsque vous parcourez le code après le point d'arrêt actuel. La commande Verrouiller tous les threads sauf celui-ci gèle tous les threads à l'exception de celui qui exécute la tâche.

L'illustration suivante présente les autres éléments de menu pour chaque tâche.

Menu du thread Raccourci dans la fenêtre Tâches parallèles
Afficher: