Поделиться через


Использование окна задач (C#, Visual Basic, C++)

Окно "Задачи " напоминает окно "Потоки ", за исключением того, что оно отображает сведения об асинхронных задачах, созданных с помощью шаблона async/await, а также называется асинхронным шаблоном на основе задач (TAP) вместо сведений на основе потоков. Как и потоки, задачи представляют асинхронные операции, которые могут выполняться одновременно; однако несколько задач могут выполняться в одном потоке.

В коде .NET можно использовать окно "Задачи " при работе с приложениями с помощью шаблона async/await (Await и Async в VisualBasic). Однако представление "Задачи " в окне Параллельных стеков часто удобнее для отладки асинхронных приложений. Дополнительные сведения см. в разделе Отладка асинхронного приложения.

В коде .NET можно использовать окно "Задачи " при работе с приложениями с помощью шаблона async/await (Await и Async в VisualBasic). Однако представление "Задачи " в окне Параллельных стеков часто удобнее для отладки асинхронных приложений. Дополнительные сведения см. в статье о просмотре потоков и задач в окне "Параллельные стеки".

Подсказка

Для кода C/C++ представление "Потоки " в окне Параллельных стеков обычно наиболее полезно, если необходимо отлаживать группы задач, параллельные алгоритмы, асинхронные агенты и упрощенные задачи. Дополнительные сведения см. в статье о просмотре потоков и задач в окне "Параллельные стеки".

Окно "Задачи " можно использовать всякий раз, когда вы переходите в отладчик. Вы можете получить доступ к нему в меню отладки , щелкнув Windows и выбрав пункт "Задачи". На следующем рисунке показано окно "Задачи " в режиме по умолчанию.

Окно задач

Окно задач

Замечание

В управляемом коде состояние TaskTaskStatus.Created, TaskStatus.WaitForActivation или TaskStatus.WaitToRun может не отображаться в окне "Задачи ", когда управляемые потоки находятся в состоянии спящего режима или соединения.

Сведения о столбцах задач

В столбцах в окне "Задачи " отображаются следующие сведения.

Имя столбца Описание
Флаги Показывает, какие задачи помечены и позволяет пометить или снять пометку с задачи.
значки Желтая стрелка Желтая стрелка указывает текущую задачу. Текущая задача — это наиболее приоритетная задача в текущем потоке.

Зеленая стрелка Зеленая стрелка указывает текущий контекст отладчика (после переключения на задачу в отладчике).

Белая стрелка Белая стрелка указывает на остановленное задание, то есть то, которое было текущим, когда был вызван отладчик.

Значок приостановки Значок приостановки указывает задачу, которая была заморожена пользователем. Вы можете заморозить и разморозить задачу, щелкнув ее правой кнопкой мыши в списке.
ИДЕНТИФИКАТОР Номер, предоставленный системой для задачи. В машинном коде это адрес задачи.
Статус Текущее состояние (запланированное, активное, заблокированное, зацикленное, ожидающее или завершенное) задачи.

Состояние запланировано Запланировано. Запланированная задача — это задача, которая еще не была запущена и поэтому еще не имеет стека вызовов, назначенного потока или связанных данных.

Состояние Активный. Активная задача — это задача, которая выполнялась перед остановкой выполнения в отладчике.

Состояние заблокировано Блокированный. Заблокированная задача — это задача, которая находится в состоянии блокировки, ожидая сигнала от события, освобождения блокировки или завершения другой задачи.

Статус ожидается Ожидание. Неблокирующая задача ожидания, использующая шаблон async/await.

Состояние Зависание Зависание. Символ взаимоблокировки относится к задаче ожидания, связанная с ним потоком.

Наведите указатель мыши на ячейку "Состояние ", чтобы просмотреть дополнительные сведения о блоке. Предупреждение: Окно задач сообщает взаимоблокировку только для заблокированной задачи, которая использует примитив синхронизации, поддерживаемый обходом цепочки ожидания (WCT). Например, для объекта Task, который взаимоблокирован и использует WCT, отладчик сообщает о взаимоблокировке ожидания. Для задачи с взаимной блокировкой, управляемой средой параллельного выполнения, которая не использует WCT, отладчик сообщает об ожидании. Дополнительные сведения о WCT см. в разделе " Обход цепочки ожидания".
Время начала Время, в течение которого задача стала активной.
Длительность Количество секунд, в течение которых задача была активна.
Время завершения Время завершения задачи.
Местоположение Текущее расположение в стеке вызовов задачи. Наведите указатель мыши на эту ячейку, чтобы просмотреть весь стек вызовов для задачи. Запланированные задачи не имеют значения в этом столбце.
задачи Исходный метод и все аргументы, переданные задаче при его создании.
AsyncState Для управляемого кода состояние задачи. По умолчанию этот столбец скрыт. Чтобы отобразить этот столбец, откройте контекстное меню для одного из заголовков столбцов. Выберите столбцы, AsyncState.
Родитель Идентификатор задачи, которая создала эту задачу. Если это пусто, задача не имеет родительского элемента. Это применимо только для управляемых программ.
Назначение потока Идентификатор и имя потока, в котором выполняется задача.
AppDomain Для управляемого кода домен приложения, в котором выполняется задача.
task_group Для нативного кода адрес объекта task_group, запланировавшего задачу. Для асинхронных агентов и упрощенных задач этот столбец имеет значение 0.
Процесс Идентификатор процесса, на котором выполняется задача.

Столбцы можно добавить в представление, щелкнув правой кнопкой мыши заголовок столбца и выбрав нужные столбцы. (Удаление столбцов путем очистки выделенных элементов.) Можно также изменить порядок столбцов, перетащив их влево или вправо. Контекстное меню для столбца показано на следующем рисунке.

Меню сокращенных команд в окне

Меню сокращенных команд в окне

Сортировка задач

Чтобы сортировать задачи по критериям столбца, щелкните заголовок столбца. Например, щелкнув заголовок столбца идентификатора , можно отсортировать задачи по идентификатору задачи: 1,2 3 4,5 и т. д. Чтобы изменить порядок сортировки, снова щелкните заголовок столбца. Текущий столбец сортировки и порядок сортировки указывается стрелкой в столбце.

Группирование задач

Задачи можно группировать на основе любого столбца в представлении списка. Например, щелкнув правой кнопкой мыши заголовок столбца "Состояние ", а затем щелкнув группу по>[состоянию], можно сгруппировать все задачи с одинаковым состоянием. Например, вы можете быстро увидеть ожидающие задачи, чтобы сосредоточиться на том, почему они заблокированы. Вы также можете свернуть группу, которая не представляет интереса во время сеанса отладки. Таким же образом можно сгруппировать по другим столбцам. Группа может быть отмечена или снята отметка просто при нажатии кнопки рядом с заголовком группы. На следующем рисунке показано окно "Задачи " в сгруппированном режиме.

Сгруппированный режим в окне

Сгруппированный режим в окне

Представление родитель-ребенок

(Это представление доступно только для управляемого кода.) Щелкнув правой кнопкой мыши заголовок столбца "Состояние", а затем щелкнув "Группа> породителю", можно изменить список задач на иерархическое представление, в котором каждая дочерняя задача является подузлом, который можно отобразить или скрыть под родительским элементом.

Пометка задач

Вы можете пометить поток, на котором выполняется задача, выбрав элемент списка задач и затем выбрав Пометить назначенный поток в контекстном меню или щелкнув значок флага в первом столбце. Если пометить несколько задач, можно сортировать по столбцу флага, чтобы переместить все помеченные задачи в верхнюю часть, чтобы сосредоточиться только на них. Вы также можете использовать окно Parallel Stacks для просмотра только помеченных задач. Это позволяет отфильтровать задачи, которые вам не нужны для отладки. Флаги не сохраняются между сеансами отладки.

Замораживание и отморозка задач

Поток, на котором выполняется задача, можно заморозить, щелкнув правой кнопкой мыши элемент списка задач и нажав кнопку "Заморозить назначенный поток". (Если задача уже заморожена, команда называется Разморозить Назначенный Поток.) При замораживании потока этот поток не будет выполняться при пошаговом выполнении кода после текущей точки остановки. Команда "Заморозить все потоки, кроме этого" замораживает все потоки, кроме того, который выполняет элемент списка задач.

На следующем рисунке показаны другие пункты меню для каждой задачи.

Контекстное меню потока в окне

Контекстное меню потока в окне

Переключение активной задачи или кадра

Команда Switch to Task делает текущую задачу активной задачей. Команда Switch to Frame делает выбранный кадр стека активным кадром стека. Контекст отладчика переключается на текущую задачу или выбранный кадр стека.