Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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 |
![]() ![]() ![]() ![]() |
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. ![]() ![]() ![]() ![]() ![]() 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.
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.
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.
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.