Compartilhar via


Usando a janela Tarefas (C#, Visual Basic)

A janela Tarefas se assemelha à janela Threads , exceto que ela mostra informações sobre tarefas assíncronas criadas usando o padrão assíncrono/await, também chamada de TAP (padrão assíncrono baseado em tarefa) em vez de informações baseadas em thread. Assim como os 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 quando trabalha com aplicativos usando o padrão assíncrono/await (Await e Async no VisualBasic). No entanto, a exibiçã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 quando trabalha com aplicativos usando o padrão assíncrono/await (Await e Async no VisualBasic). No entanto, a exibição Tarefas na janela Pilhas Paralelas geralmente é mais útil para depurar aplicativos assíncronos. Para obter mais informações, confira Exibir threads e tarefas na janela Pilhas Paralelas.

Dica

Para código C/C++, use a exibiçã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, confira Exibir threads e tarefas na janela Pilhas Paralelas.

Você pode usar a janela Tarefas sempre que entrar no modo de depuração. Você pode acessá-lo no menu Depurar clicando no Windows e clicando em Tarefas. A ilustração a seguir mostra a janela Tarefas em seu modo padrão.

Janela de tarefas

Janela de tarefas

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 um estado de suspensão ou junção.

Informações da coluna Tarefas

As colunas na janela Tarefas mostram as informações a seguir.

Nome da Coluna Descrição
Sinalizadores Mostra quais tarefas estão sinalizadas e permite que você sinalize ou desmarque uma tarefa.
Ícones Seta amarela Uma seta amarela indica a tarefa atual. A tarefa atual é a tarefa mais importante no thread atual.

Seta verde Uma seta verde indica o contexto atual do depurador (seguindo uma opção para tarefa no depurador).

Seta branca Uma seta branca indica a tarefa de interrupção, ou seja, aquela que era atual quando o depurador foi invocado.

Ícone de pausa O ícone de pausa indica uma tarefa que foi congelada pelo usuário. Você pode congelar e descongelar uma tarefa clicando com o botão direito do mouse nela na lista.
ID Um número fornecido pelo sistema para a tarefa. No código nativo, esse é o endereço da tarefa.
Estado O estado atual (agendado, ativo, bloqueado, deadlock, aguardando ou concluído) da tarefa.

Status Agendado Marcado. Uma tarefa agendada é uma que ainda não foi executada e, portanto, ainda não tem uma pilha de chamadas, um thread atribuído ou informações relacionadas.

Status Ativo Ativo. Uma tarefa ativa é aquela que estava executando o código antes de ser interrompida pelo depurador.

Status bloqueado Bloqueado. Uma tarefa bloqueada é aquela bloqueada porque está aguardando que um evento seja sinalizado, que um bloqueio seja liberado ou que outra tarefa seja concluída.

Status aguardando Aguardando. Uma tarefa de espera não bloqueante que usa o padrão async/await.

Status Bloqueado Bloqueado. O símbolo de deadlock refere-se a uma tarefa de espera cujo thread associado está em deadlock com outro thread.

Passe o mouse sobre a célula Status para ver mais informações sobre o bloco. Aviso: A janela Tarefas relata deadlock apenas para uma tarefa bloqueada que usa um primitivo de sincronização com suporte do WCT (Wait Chain Traversal). Por exemplo, para um objeto bloqueado Task, que usa o WCT, o depurador relata Aguardando-bloqueio. Para uma tarefa em deadlock que é gerenciada pelo Runtime de Execução Concorrente e que não utiliza o WCT, o depurador informa Aguardando. Para obter mais informações sobre o WCT, consulte Wait Chain Traversal.
Horário de Início O momento em que a tarefa se tornou ativa.
Duração O número de segundos em que a tarefa está ativa.
Tempo de Conclusão A hora em que a tarefa foi concluída.
Localidade A localização atual na pilha de chamadas da tarefa. Passe o mouse 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 todos os argumentos que foram passados para a tarefa quando ela foi criada.
AsyncState Para o código gerenciado, o status 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 Colunas, AsyncState.
pai A ID da tarefa que criou essa tarefa. Se isso estiver em branco, a tarefa não terá nenhum pai. Isso só é aplicável para programas gerenciados.
Atribuição de thread A ID e o nome do thread no qual a tarefa está em execução.
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.

Você pode adicionar colunas ao modo de exibição clicando com o botão direito do mouse em um título de coluna e selecionando as colunas desejadas. (Remova colunas desmarcando as seleções.) Você também pode reordenar colunas arrastando-as para a esquerda ou para a direita. O menu de atalho de coluna é mostrado na ilustração a seguir.

Menu de atalho de exibição na janela de Tarefas

Menu de atalho de exibição na janela de Tarefas

Tarefas de classificação

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 da tarefa: 1,2,3,4,5 e assim por diante. Para reverter 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 mouse no cabeçalho da coluna Status e clicando em Agrupar por>[status], você pode agrupar todas as tarefas que têm o mesmo status. Por exemplo, você pode ver rapidamente as tarefas pendentes para que você possa se concentrar no motivo pelo qual elas estão bloqueadas. Você também pode recolher um grupo que não interesse durante a sessão de depuração. Da mesma maneira, você pode agrupar por outras colunas. Um grupo pode ser marcado ou desmarcado apenas clicando no botão ao lado do cabeçalho do grupo. A ilustração a seguir mostra a janela Tarefas no modo agrupado.

Modo agrupado na janela Tarefas

Modo agrupado na janela Tarefas

Exibição pai-filho

(Essa exibição está disponível somente para código gerenciado.) Clicando com o botão direito do mouse no cabeçalho da coluna Status e clicando 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.

Tarefas de sinalização

Você pode sinalizar o thread da tarefa na qual uma tarefa está em execução selecionando o item de 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 você sinalizar várias tarefas, poderá classificar pela coluna de sinalização para levar todas as tarefas sinalizadas ao topo, permitindo que você se concentre 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 são persistidos entre as sessões de depuração.

Tarefas de congelamento e descongelamento

Você pode congelar o thread no qual uma tarefa está em execução 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 Thread Atribuído.) Quando você congela um thread, esse thread não será executado quando você percorrer o código após o ponto de interrupção atual. O comando Congelar Todos os threads, exceto este, congela todos os threads, exceto aquele que executa o item da lista de tarefas.

A ilustração a seguir mostra os outros itens de menu para cada tarefa.

Menu de acesso rápido de thread na janela de Tarefas

Menu de acesso rápido de thread na janela de Tarefas

Alternar a tarefa ou janela ativa

O comando Alternar para Tarefa torna a tarefa atual a tarefa ativa. O comando Alternar para Quadro torna o quadro de pilha selecionado o quadro de pilha ativo. O contexto do depurador muda para a tarefa atual ou o frame de pilha selecionado.