Partager via


Utilisation de la fenêtre Tâches (C#, Visual Basic, C++)

La fenêtre Tâches ressemble à la fenêtre Threads , sauf qu’elle affiche des informations sur System.Threading.Tasks.Task ou task_handle objets au lieu de 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.

Dans le code managé, vous pouvez utiliser la fenêtre Tâches lorsque vous travaillez avec des objets ou avec System.Threading.Tasks.Task les mots clés await et async (Await et Async dans VisualBasic). Pour plus d’informations sur les tâches dans le code managé, consultez Programmation parallèle.

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

Vous pouvez utiliser la fenêtre Tâches chaque fois que vous vous connectez au débogueur. Vous pouvez y accéder dans le menu Débogage en cliquant sur Windows , puis sur Tâches. L’illustration suivante montre la fenêtre Tâches en mode par défaut.

Fenêtre Tâches

Fenêtre Tâches

Remarque

Dans le code managé, un Task ayant un statut de TaskStatus.Created, TaskStatus.WaitingForActivation ou TaskStatus.WaitingToRun pourrait ne pas être affiché dans la fenêtre Tâches lorsque les threads managés sont en état de sommeil ou de jointure.

Informations sur les colonnes de tâches

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

Nom de la colonne Descriptif
Drapeaux Montre quelles tâches sont signalées et vous permet de marquer ou de démarcher une tâche.
icônes Flèche jaune Une flèche jaune indique la tâche actuelle. La tâche actuelle est la tâche principale sur le fil d'exécution actuel.

Flèche verte Une flèche verte indique le contexte actuel du débogueur (après un basculement vers la tâche dans le débogueur).

Flèche blanche Une flèche blanche indique la tâche critique, c’est-à-dire celle qui était en cours lorsque le débogueur a été appelé.

Icône Suspendre L’icône de pause indique une tâche qui a été figée par l’utilisateur. Vous pouvez figer et libérer une tâche en cliquant dessus avec le bouton droit dans la liste.
Identifiant Numéro fourni par le système pour la tâche. Dans le code natif, il s’agit de l’adresse de la tâche.
État État actuel (planifié, actif, bloqué, en impasse, en attente ou terminé) de la tâche.

Statut planifié Planifié. Une tâche planifiée est une tâche qui n’a pas encore été exécutée et, par conséquent, n’a pas encore de pile d’appels, de thread affecté ou d’informations associées.

État actif Actif. Une tâche active est celle qui exécutait du code avant de s'arrêter dans le débogueur.

État bloqué Bloqué. Une tâche bloquée est une tâche bloquée, car elle attend qu’un événement soit signalé, qu’un verrou soit libéré ou qu’une autre tâche se termine.

État en attente Attente. Une tâche en attente non bloquante qui utilise le modèle async/await.

État bloqué Bloqué. Une tâche bloquée est une tâche en attente dont le thread est bloqué avec un autre thread.

Pointez sur la cellule Status pour un blocage ou une tâche en attente pour afficher plus d’informations sur le bloc. Avertissement: La fenêtre Tâches signale un blocage uniquement pour une tâche bloquée qui utilise une primitive de synchronisation prise en charge par wait Chain Traversal (WCT). Par exemple, pour un objet Task interbloqué , qui utilise WCT, le débogueur signale Awaiting-deadlocked. Pour une tâche bloquée gérée par le Runtime de concurrence, qui n’utilise pas WCT, 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 pendant lesquelles la tâche a été active.
Heure d’achèvement Heure à laquelle la tâche s’est terminée.
Lieu Position actuelle dans la pile des appels de la tâche. Placez le curseur sur cette cellule pour voir l’intégralité de la pile d'appels pour la tâche. Les tâches planifiées n’ont pas de valeur dans cette colonne.
Tâche Méthode initiale et arguments passés à la tâche lors de sa création.
AsyncState Pour le code managé, l’état de la tâche. Par défaut, cette colonne est masquée. Pour afficher cette colonne, ouvrez le menu contextuel de l’un des en-têtes de colonne. Choisissez Colonnes, AsyncState.
Parent ID de la tâche qui a créé cette tâche. S’il s’agit d’un champ vide, la tâche n’a pas de parent. Cela s’applique uniquement aux programmes gérés.
Affectation de thread ID et nom du thread sur lequel la tâche est en cours d’exécution.
AppDomain Pour le code managé, domaine d’application dans lequel la tâche s’exécute.
task_group Pour le code natif, l’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 est définie sur 0.
Processus ID du processus sur lequel la tâche s’exécute.

Vous pouvez ajouter des colonnes à la vue en cliquant avec le bouton droit sur un en-tête de colonne, puis en sélectionnant les colonnes souhaitées. (Supprimez les colonnes en désactivant les sélections.) Vous pouvez également réorganiser les colonnes en les faisant glisser vers la gauche ou la droite. Le menu contextuel de colonne est illustré dans l’illustration suivante.

Menu Affichage contextuel dans la fenêtre Tâches

Menu Affichage contextuel dans la fenêtre Tâches

Tâches de tri

Pour trier les tâches selon les critères de colonne, cliquez sur l’en-tête de colonne. Par exemple, en cliquant sur l’en-tête de colonne ID , vous pouvez trier les tâches par ID de tâche : 1,2,3,4,5, et ainsi de suite. Pour inverser l’ordre de tri, cliquez à nouveau sur l’en-tête de colonne. La colonne de tri actuelle et l’ordre de tri sont indiqués par une flèche sur la colonne.

Tâches de regroupement

Vous pouvez regrouper des tâches en fonction de n’importe quelle colonne dans l’affichage liste. Par exemple, en cliquant avec le bouton droit sur l’en-tête de colonne État , puis en cliquant sur Grouper par>[état], vous pouvez regrouper toutes les tâches qui ont le même état. Par exemple, vous pouvez rapidement voir les tâches en attente afin que vous puissiez vous concentrer sur la raison pour laquelle elles sont bloquées. Vous pouvez également réduire un groupe qui n’est pas intéressant pendant la session de débogage. De la même façon, vous pouvez regrouper selon les autres colonnes. Un groupe peut être (non)marqué simplement en cliquant sur le bouton à côté de l’en-tête du groupe. L’illustration suivante montre la fenêtre Tâches en mode groupé.

Mode groupé dans la fenêtre Tâches

Mode groupé dans la fenêtre Tâches

Vue parent-enfant

(Cette vue est disponible uniquement pour le code managé.) En cliquant avec le bouton droit sur l’en-tête de colonne État , puis en cliquant sur Grouper par>parent, vous pouvez modifier la liste des tâches en affichage hiérarchique, dans lequel chaque tâche enfant est un sous-nœud qui peut être affiché ou masqué sous son parent.

Tâches d’indicateur

Vous pouvez signaler le thread sur lequel une tâche est en cours d'exécution en sélectionnant l’élément dans la liste des tâches, puis en choisissant Thread marqué dans le menu contextuel, ou en cliquant sur l'icône de drapeau dans la première colonne. Si vous signalez plusieurs tâches, vous pouvez ensuite trier sur la colonne d’indicateur pour placer toutes les tâches avec indicateur en haut afin que vous puissiez vous concentrer uniquement sur eux. Vous pouvez également utiliser la fenêtre Stacks parallèles pour afficher uniquement les tâches signalées. Cela vous permet de filtrer les tâches qui ne vous intéressent pas pour le débogage. Les indicateurs ne sont pas conservés entre les sessions de débogage.

Tâches de congélation et de dégel

Vous pouvez figer le thread sur lequel une tâche s’exécute en cliquant avec le bouton droit sur l’élément de liste des tâches, puis en cliquant sur Figer le thread affecté. (Si une tâche est déjà figée, la commande est un thread affecté par thaw.) Lorsque vous figez un thread, ce thread ne s’exécute pas lorsque vous parcourez le code après le point d’arrêt actuel. La commande Figer tous les fils sauf celui-ci gèle tous les fils, à l’exception de celui qui exécute l’élément de la liste des tâches.

L’illustration suivante montre les autres éléments de menu pour chaque tâche.

Menu raccourci de fil dans la fenêtre Tâches

Menu raccourci de fil dans la fenêtre Tâches

Changement de la tâche ou du frame actif

La commande Basculer vers la tâche rend la tâche actuelle active. La commande Basculer vers une trame fait de la trame de pile sélectionnée la trame de pile active. Le contexte du débogueur bascule vers la tâche actuelle ou la trame de pile sélectionnée.