Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A janela Tarefas se assemelha à janela Threads , exceto que ela mostra informações sobre tarefas assíncronas criadas usando o padrão async/await, também chamado de padrão assíncrono baseado em tarefas (TAP) em vez de informações baseadas em threads. Como threads, as tarefas representam operações assíncronas que podem ser executadas simultaneamente; no entanto, várias tarefas podem ser executadas no mesmo thread.
No código .NET, você pode usar a janela Tarefas ao trabalhar com aplicativos usando o padrão async/await (Await e Async no VisualBasic). No entanto, a visualização Tarefas na janela Pilhas paralelas geralmente é mais útil para depurar aplicativos assíncronos. Para obter mais informações, consulte Depurar um aplicativo assíncrono.
No código .NET, você pode usar a janela Tarefas ao trabalhar com aplicativos usando o padrão async/await (Await e Async no VisualBasic). No entanto, a visualização Tarefas na janela Pilhas paralelas geralmente é mais útil para depurar aplicativos assíncronos. Para obter mais informações, consulte Ver threads e tarefas na janela Pilhas paralelas.
Sugestão
Para código C/C++, use a visualização Threads na janela Pilhas paralelas quando precisar depurar grupos de tarefas, algoritmos paralelos, agentes assíncronos e tarefas leves. Para obter mais informações, consulte Ver threads e tarefas na janela Pilhas paralelas.
Você pode usar a janela Tarefas sempre que invadir o depurador. Você pode acessá-lo no menu Depurar clicando em Windows e, em seguida, clicando em Tarefas. A ilustração a seguir mostra a janela Tarefas em seu modo padrão.
Observação
No código gerenciado, um Task que tem um status de TaskStatus.Created, TaskStatus.WaitingForActivation ou TaskStatus.WaitingToRun pode não ser exibido na janela Tarefas quando os threads gerenciados estão em estado de suspensão ou ingresso.
Informações da coluna Tarefas
As colunas na janela Tarefas mostram as seguintes informações.
| Nome da Coluna | Descrição |
|---|---|
| Bandeiras | Mostra quais tarefas são sinalizadas e permite sinalizar ou desmarcar uma tarefa. |
| Ícones |
|
| Identificação | Um número fornecido pelo sistema para a tarefa. No código nativo, este é o endereço da tarefa. |
| Situação | O estado atual (agendado, ativo, bloqueado, em impasse, aguardando ou concluído) da tarefa. Passe o cursor sobre a célula Status para ver mais informações sobre o bloco. Atenção: A janela Tarefas relata o deadlock somente para uma tarefa bloqueada que usa uma primitiva de sincronização suportada pelo WCT (Wait Chain Traversal). Por exemplo, para um objeto bloqueado Task, que usa WCT, o depurador relata Awaiting-deadlocked. Para uma tarefa bloqueada gerenciada pelo Concurrency Runtime, que não usa WCT, o depurador relata Aguardando. Para obter mais informações sobre WCT, consulte Wait Chain Traversal. |
| Hora de Início | O momento em que a tarefa se tornou ativa. |
| Duração | O número de segundos em que a tarefa esteve ativa. |
| Tempo de conclusão | A hora em que a tarefa foi concluída. |
| Localização | A localização atual na pilha de chamadas da tarefa em execução. Passe o cursor sobre esta célula para ver toda a pilha de chamadas da tarefa. As tarefas agendadas não têm um valor nesta coluna. |
| Tarefa | O método inicial e quaisquer argumentos que foram passados para a tarefa quando ela foi criada. |
| AsyncState | Para código gerido, o estado da tarefa. Por padrão, essa coluna está oculta. Para exibir essa coluna, abra o menu de contexto de um dos cabeçalhos de coluna. Escolha Columns, AsyncState. |
| Parente | A ID da tarefa que criou essa tarefa. Se estiver em branco, a tarefa não terá pai. Isso só é aplicável a programas gerenciados. |
| Atribuição de thread | A ID e o nome do thread no qual a tarefa está sendo executada. |
| AppDomain | Para código gerenciado, o domínio do aplicativo no qual a tarefa está sendo executada. |
| task_group | Para código nativo, o endereço do objeto task_group que agendou a tarefa. Para agentes assíncronos e tarefas leves, esta coluna é definida como 0. |
| Processo | A ID do processo em que a tarefa está sendo executada. |
Pode adicionar colunas à vista clicando com o botão direito do rato num título de coluna e, em seguida, selecionando as colunas pretendidas. (Remova as colunas limpando as seleções.) Você também pode reordenar colunas arrastando-as para a esquerda ou para a direita. O menu de atalho da coluna é mostrado na ilustração a seguir.
Classificando tarefas
Para classificar tarefas por critérios de coluna, clique no cabeçalho da coluna. Por exemplo, clicando no cabeçalho da coluna ID , você pode classificar as tarefas por ID de tarefa: 1,2,3,4,5 e assim por diante. Para inverter a ordem de classificação, clique no cabeçalho da coluna novamente. A coluna de classificação atual e a ordem de classificação são indicadas por uma seta na coluna.
Agrupando tarefas
Você pode agrupar tarefas com base em qualquer coluna no modo de exibição de lista. Por exemplo, clicando com o botão direito do rato no cabeçalho da coluna Estado e, em seguida, clicando em Agrupar por>[estado], pode agrupar todas as tarefas que têm o mesmo estado. Por exemplo, você pode ver rapidamente as tarefas aguardando para se concentrar no motivo pelo qual elas estão bloqueadas. Você também pode recolher um grupo que não seja do seu interesse durante a sessão de depuração. Da mesma forma, é possível agrupar pelas restantes colunas. Um grupo pode ser (des)sinalizado apenas clicando no botão ao lado do cabeçalho do grupo. A ilustração a seguir mostra a janela Tarefas no modo agrupado.
Visualização Pai-Filho
(Esta vista está disponível apenas para código gerido.) Ao clicar com o botão direito do rato no cabeçalho da coluna Status e, em seguida, clicar em Agrupar por>Pai, você pode alterar a lista de tarefas para uma exibição hierárquica, na qual cada tarefa filha é um subnó que pode ser exibido ou oculto sob o seu pai.
Sinalizando tarefas
Você pode sinalizar o thread da tarefa na qual uma tarefa está sendo executada selecionando o item da lista de tarefas e, em seguida, escolhendo Sinalizar Thread Atribuído no menu de contexto ou clicando no ícone de sinalizador na primeira coluna. Se sinalizares várias tarefas, podes ordenar pela coluna de sinalização para colocares todas as tarefas sinalizadas no topo, de forma a poderes concentrar-te apenas nelas. Você também pode usar a janela Pilhas paralelas para exibir apenas tarefas sinalizadas. Isso permite filtrar tarefas nas quais você não está interessado para depuração. Os sinalizadores não persistem entre as sessões de depuração.
Tarefas de congelamento e descongelamento
Você pode congelar o thread no qual uma tarefa está sendo executada clicando com o botão direito do mouse no item da lista de tarefas e clicando em Congelar Thread Atribuído. (Se uma tarefa já estiver congelada, o comando será Descongelar fio atribuído.) Quando se congela um fio, esse fio não será executado quando se percorre o código após o ponto de interrupção atual. O comando Freeze All Threads But This One congela todos os threads, exceto aquele que está executando o item da lista de tarefas.
A ilustração a seguir mostra os outros itens de menu para cada tarefa.
Alternando a tarefa ou o quadro ativo
O comando Alternar para Tarefa torna a tarefa atual a tarefa ativa. O comando Alternar para Frame torna o frame de pilha selecionado o frame de pilha ativo. O contexto do depurador alterna para a tarefa atual ou para o frame de pilha selecionado.