Uso de la ventaja Tareas paralelas

La ventana Tareas paralelas se parece a la ventana Subprocesos, solo que muestra información sobre cada objeto System.Threading.Tasks.Task o task_handle en lugar de cada subproceso. Como 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 código administrado, puede utilizar la ventana Tareas paralelas cuando trabaja con objetos System.Threading.Tasks.Task. Para obtener más información sobre tareas en código administrado, vea Programación paralela en .NET Framework.

En código nativo, puede utilizar la ventana Tareas paralelas cuando trabaja con grupos de tareas, algoritmos paralelos, agentes asincrónicos y tareas ligeras. Para obtener más información sobre tareas en código nativo, vea Runtime de simultaneidad.

Puede utilizar la ventana Tareas paralelas cada vez que interrumpe el depurador. Puede tener acceso a ella en el menú Depurar haciendo clic en Ventanas y, a continuación, en Tareas paralelas. En la siguiente ilustración se muestra la ventana Tareas paralelas en su modo predeterminado.

Ventana Tareas paralelas

Nota

En código administrado, una Task que tiene un estado de Created, WaitingForActivation o WaitingToRun podría no estar visible en la ventana Tareas paralelas si el subproceso en el que se creó o programó está en un estado de suspensión o combinación.

Información de columnas de tareas paralelas

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

Nombre de columna

Descripción

Marcadores

Muestra las tareas que están marcadas y permiten marcar o desmarcar una tarea.

Iconos

Una flecha amarilla indica la tarea actual. La tarea actual es la tarea de nivel superior del subproceso actual.

Una flecha blanca indica la tarea de ruptura, es decir, la tarea en curso cuando se invocó el depurador.

El icono de pausa indica una tarea inmovilizada por el usuario. Puede inmovilizar y liberar una tarea haciendo clic con el botón secundario en ella en la lista.

ID

Un número proporcionado por sistema para la tarea. En código nativo, ésta es la dirección de la tarea.

Estado

El estado actual (programado, ejecutándose, interbloqueado o en espera) de la tarea. Una tarea programada es la que aún no se ha ejecutado y, por consiguiente, no tiene pila de llamadas, subproceso asignado ni información relacionada.

Una tarea en ejecución es la que estaba ejecutando código antes de la interrupción del depurador.

Una tarea en espera es la que se bloquea porque está esperando a que se señalice un evento, se libere un bloqueo o termine otra tarea.

Una tarea interbloqueada es una tarea en espera cuyo subproceso está en interbloqueo con otro subproceso.

Mantenga el mouse sobre la celda Estado de un interbloqueo o una tarea en espera para ver más información sobre el bloque.

NotaNota
La ventana Tareas paralelas notifica un interbloqueo solo para una tarea bloqueada que utilice una sincronización primitiva compatible con WCT (Wait Chain Traversal).Por ejemplo, para un objeto Task interbloqueado que utiliza WCT, el depurador notifica En espera con interbloqueo.Para una tarea interbloqueada administrada por el Runtime de simultaneidad, que no utiliza WCT, el depurador notifica En espera.Para obtener más información sobre WCT, vea Wait Chain Traversal.

Ubicación

La ubicación actual en la pila de llamadas de la tarea. Desplace el puntero del mouse sobre esta celda para ver la pila de llamadas completa de 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ó.

Primario

El identificador del subproceso que creó esta ventana. Si está en blanco, la tarea tiene ningún primario. Esto solo es aplicable a los programas administrados.

Asignación de subprocesos

El identificador y nombre del subproceso en el que la tarea se está ejecutando.

AppDomain

En código administrado, el dominio de aplicación en el que la tarea se está ejecutando.

task_group

En código nativo, la dirección del objeto task_group que programó la tarea. En los agentes asincrónicos y las tareas ligeras, esta columna se establece en 0.

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

Menú contextual de la ventana Tareas paralelas

Ordenar Tareas

Para ordenar las tareas por columnas, haga clic en el encabezado de columna. Por ejemplo, haciendo 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, haga clic en el encabezado de columna de nuevo. Una flecha en la columna indica el criterio y la columna de ordenación.

Agrupar tareas

Puede agrupar tareas por cualquier columna en la vista de lista. Por ejemplo, haciendo clic con el botón secundario en el encabezado de columna Estado y Agrupar por estado, puede agrupar todas las tareas que tienen el mismo estado. Por ejemplo, podría ver rápidamente las tareas en espera para ver por qué se bloquean. También puede contraer un grupo que no es de interés durante la sesión de depuración. De la misma manera, puede agrupar por otras columnas. Se puede marcar o quitar la marca de un grupo haciendo clic en el botón del encabezado de grupo. En la siguiente ilustración se muestra la ventana Tareas paralelas en modo agrupado.

Modo agrupado de tareas paralelas

Vista de elemento primario y secundario

(Esta vista solo está disponible en código administrado). Haciendo clic con el botón secundario en un encabezado de columna y a continuación en Vista de elemento primario y secundario, puede cambiar la lista de tareas a una vista jerárquica, en la que cada tarea secundaria es un subnodo que se puede mostrar u ocultar bajo su elemento primario. En la siguiente ilustración se muestran las tareas en vista de elemento secundario y primario.

Vista de elemento primario y secundario de tareas paralelas

Marcar tareas

Puede marcar una tarea haciendo clic con el botón secundario en el elemento de lista de tareas y a continuación haciendo clic en Marca o en el icono de marca de la primera columna. Si marca varias tareas, después puede ordenarlas en la columna para llevar todas las tareas marcadas a la parte superior de forma que se pueda concentrar en ellas. También puede utilizar la ventana Pilas paralelas para ver las tareas marcadas solamente. Esto le permite filtrar las tareas que no le interesa depurar. Las marcas no se conservan entre sesiones de depuración.

Inmovilizar y reanudar tareas

Puede inmovilizar el subproceso en el que una tarea se está ejecutando haciendo clic con el botón secundario en el elemento de lista de tareas y haciendo clic en Inmovilizar subproceso asignado. (Si la tarea ya está inmovilizada, el comando es Reanudar subproceso asignado). Al inmovilizar un subproceso, no se ejecutará cuando se recorra el código después del punto de interrupción actual. El comando Inmovilizar todos los subprocesos menos este inmoviliza todos los subprocesos salvo el que está ejecutando el elemento de lista de tareas.

En la siguiente ilustración se muestran el resto de elementos de menú para cada tarea.

Menú contextual de la ventana Tareas paralelas

Vea también

Tareas

Uso de la ventana Tareas paralelas

Tutorial: Depurar una aplicación paralela

Conceptos

Programación paralela en .NET Framework

Runtime de simultaneidad

Otros recursos

Guía básica del depurador

Depurar código administrado

Historial de cambios

Fecha

Historial

Motivo

Marzo de 2011

Se ha agregado información sobre cómo el depurador notifica los interbloqueos.

Mejora de la información.