Compartir a través de


Uso de la ventana Tareas (C#, Visual Basic, C++)

La ventana Tareas es similar a la ventana Subprocesos , salvo que muestra información sobre System.Threading.Tasks.Task o task_handle objetos en lugar de cada subproceso. Al igual que los subprocesos, las tareas representan operaciones asincrónicas que se pueden ejecutar simultáneamente; sin embargo, varias tareas se pueden ejecutar en el mismo subproceso.

En el código administrado, puede usar la ventana Tareas al trabajar con System.Threading.Tasks.Task objetos o con las palabras clave await y async (Await y Async en VisualBasic). Para obtener más información sobre las tareas en código administrado, consulte Programación paralela.

En código nativo, puede usar la ventana Tareas al trabajar con grupos de tareas, algoritmos paralelos, agentes asincrónicos y tareas ligeras. Para obtener más información sobre las tareas en código nativo, consulte Tiempo de ejecución de simultaneidad.

Puede usar la ventana Tareas cada vez que active el depurador. Puede acceder a él en el menú Depurar haciendo clic en Windows y, a continuación, en Tareas. En la ilustración siguiente se muestra la ventana Tareas en su modo predeterminado.

Ventana de Tareas

Ventana de Tareas

Nota:

En el código administrado, es posible que un Task que tenga el estado TaskStatus.Created, TaskStatus.WaitingForActivation o TaskStatus.WaitingToRun no se muestre en la ventana Tareas cuando los subprocesos administrados están en estado de suspensión o combinación.

Información de columnas de tareas

Las columnas de la ventana Tareas muestran la siguiente información.

Nombre de la columna Descripción
Banderas Muestra qué tareas están marcadas y le permite marcar o desmarcar una tarea.
iconos Flecha amarilla Una flecha amarilla indica la tarea actual. La tarea actual es la tarea más alta en el hilo actual.

Flecha verde Una flecha verde indica el contexto actual del depurador (tras un cambio a la tarea en el depurador).

Flecha blanca Una flecha blanca indica la tarea de interrupción, es decir, la que estaba activa cuando se invocó el depurador.

Icono de pausa El icono de pausa indica una tarea que el usuario ha inmovilizado. Puede inmovilizar y descongelar una tarea haciendo clic con el botón derecho en ella en la lista.
IDENTIFICACIÓN Número proporcionado por el sistema para la tarea. En código nativo, esta es la dirección de la tarea.
Estado Estado actual (programado, activo, bloqueado, interbloqueado, en espera o completado) de la tarea.

Estado: Programado Programado. Una tarea programada es una que aún no se ha ejecutado y, por lo tanto, aún no tiene una pila de llamadas, un subproceso asignado o información relacionada.

Estado activo Activo. Una tarea activa es una que estaba ejecutando código antes de interrumpir el depurador.

Estado bloqueado Bloqueado. Una tarea bloqueada es aquella que está bloqueada porque está esperando que se señale un evento, que se libere un candado o que otra tarea termine.

Estado en espera Espera. Una tarea no bloqueante y en espera que utiliza el patrón async/await.

Estado interbloqueado Interbloqueo. Una tarea interbloqueada es una tarea en espera cuyo subproceso está interbloqueado con otro subproceso.

Mantenga el puntero sobre la celda Estado de una tarea interbloqueada o en espera para ver más información sobre el bloque. Advertencia: La ventana Tareas informa de interbloqueo solo para una tarea bloqueada que usa un primitivo de sincronización compatible con Wait Chain Traversal (WCT). Por ejemplo, para un objeto interbloqueado Task, que usa WCT, el depurador informa de Esperando-interbloqueado. Para una tarea interbloqueada administrada por el tiempo de ejecución de concurrencia, que no usa WCT, el depurador informa En espera. Para obtener más información sobre WCT, vea Wait Chain Traversal.
Hora de comienzo Hora en la que la tarea se puso en actividad.
Duración Número de segundos que la tarea ha estado activa.
Tiempo de finalización Hora a la que se completó la tarea.
Ubicación Ubicación actual en la pila de llamadas de la tarea. Pase el cursor sobre esta celda para ver la pila completa de llamadas para la tarea. Las tareas programadas no tienen un valor en esta columna.
tarea El método inicial y los argumentos que se pasaron a la tarea cuando se creó.
AsyncState En el caso del código administrado, el estado de la tarea. De forma predeterminada, esta columna está oculta. Para mostrar esta columna, abra el menú contextual de uno de los encabezados de columna. Elija Columnas, AsyncState.
primario de ID de la tarea que originó esta tarea. Si esto está en blanco, la tarea no tiene ningún elemento primario. Esto solo es aplicable a los programas administrados.
Asignación de subprocesos Identificador y nombre del subproceso en el que se ejecuta la tarea.
AppDomain En el caso del código administrado, el dominio de aplicación en el que se ejecuta la tarea.
task_group Para el código nativo, la dirección del objeto task_group que programó la tarea. En el caso de los agentes asincrónicos y las tareas ligeras, esta columna se establece en 0.
Proceso Identificador del proceso en el que se ejecuta la tarea.

Puede agregar columnas a la vista haciendo clic con el botón derecho en un encabezado de columna y seleccionando las columnas que desee. (Quite columnas borrando las selecciones). También puede reordenar las columnas arrastrándolas de izquierda o derecha. El menú contextual de columna se muestra en la siguiente ilustración.

Menú de acceso directo en la ventana de Tareas

Menú de acceso directo en la ventana de Tareas

Ordenar tareas

Para ordenar las tareas por criterios de columna, haga clic en el encabezado de columna. Por ejemplo, si hace clic en el encabezado de columna ID , puede ordenar las tareas por identificador de tarea: 1,2,3,4,5, etc. Para invertir el criterio de ordenación, vuelva a hacer clic en el encabezado de columna. La columna de ordenación y el criterio de ordenación actuales se indican mediante una flecha en la columna.

Tareas de agrupación

Puede agrupar tareas en función de cualquier columna de la vista de lista. Por ejemplo, si hace clic con el botón derecho en el encabezado de columna Estado y, a continuación, hace clic en Agrupar por>[estado], puede agrupar todas las tareas que tengan el mismo estado. Por ejemplo, podría ver rápidamente las tareas en espera para que pueda centrarse en por qué se bloquean. También puedes contraer un grupo que no te interese mientras depuras. De la misma manera, puede agrupar por otras columnas. Un grupo puede marcarse (o no) simplemente haciendo clic en el botón situado junto al título del grupo. En la ilustración siguiente se muestra la ventana Tareas en modo agrupado.

Modo agrupado en la ventana Tareas

Modo agrupado en la ventana Tareas

Vista de padre e hijo

(Esta vista solo está disponible para código administrado). Al hacer clic con el botón derecho en el encabezado de columna Estado y, a continuación, hacer clic en Agrupar por>elemento primario, puede cambiar la lista de tareas a una vista jerárquica, en la que cada tarea secundaria es un subdodo que se puede mostrar o ocultar bajo su elemento primario.

Marcar tareas

Puede marcar el subproceso en el que se ejecuta una tarea seleccionando el elemento de lista de tareas y seleccionando Marcar subproceso asignado en el menú contextual o haciendo clic en el icono de marca de la primera columna. Si marca varias tareas, puede ordenar en la columna de marca para llevar todas las tareas marcadas a la parte superior para que pueda centrarse solo en ellas. También puede usar la ventana Pilas paralelas para ver solo las tareas marcadas. Esto le permite filtrar, para depuración, las tareas que no le interesen. Las banderas no se conservan entre las sesiones de depuración.

Tareas de congelación y descongelación

Para inmovilizar el subproceso en el que se ejecuta una tarea, haga clic con el botón derecho en el elemento de lista de tareas y, a continuación, haga clic en Inmovilizar subproceso asignado. (Si una tarea ya está inmovilizada, el comando es Descongelar subproceso asignado). Al inmovilizar un subproceso, ese subproceso no se ejecutará al recorrer el código después del punto de interrupción actual. El comando Freeze All Threads But This One inmoviliza todos los subprocesos excepto el que ejecuta el elemento de lista de tareas.

En la ilustración siguiente se muestran los demás elementos de menú para cada tarea.

Menú de acceso directo en la ventana Tareas

Menú de acceso directo en la ventana Tareas

Cambiar la tarea activa o ventana

El comando Cambiar a tarea convierte la tarea actual en la tarea activa. El comando Switch to Frame hace que el marco de pila seleccionado sea el marco de pila activo. El contexto del depurador cambia a la tarea actual o al marco de pila seleccionado.