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


Использование окна задач

Окно Задачи выглядит так же, как окно Потоки, за тем исключением, что вместо сведений о каждом потоке в нем отображаются сведения об объектах Task, task_handle или WinJS.Promise. Как и потоки, задачи представляют асинхронные операции, которые могут выполняться параллельно; однако несколько задач могут выполняться в одном потоке. Дополнительные сведения см. в разделе Асинхронное программирование в JavaScript (приложения для Магазина Windows).

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

В случае машинного кода окно Задачи можно использовать при работе с группами задач, параллельными алгоритмами, асинхронными агентами и упрощенными задачами. Дополнительные сведения о задачах в машинном коде см. в разделе Среда выполнения с параллелизмом.

В случае JavaScript окно "Задачи" можно использовать при работе с методом обещания .then.

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

Окно параллельных задач

Примечание

В случае управляемого кода объект Task, который имеет состояние Created, WaitingForActivation или WaitingToRun, может не отображаться в окне "Задачи", если управляемые потоки находятся в состоянии сна или состоянии соединения.

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

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

Имя столбца

Описание

Флаги

Показывает, какие задачи помечены, и позволяет помечать задачи и снимать с них метки.

Значки

Рядом с текущей задачей отображается желтая стрелка. Текущая задача находится на самом верхнем уровне текущего потока.

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

Значок паузы указывает задачу, замороженную пользователем. Задачу можно заморозить или разморозить, щелкнув ее в списке правой кнопкой мыши.

Идентификатор

Предоставленный системой номер задачи. В машинном коде этот номер является адресом задачи.

Состояние

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

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

Находящаяся в ожидании задача – это задача, заблокированная вследствие ожидания сигнала события, освобождения блокировки или завершения другой задачи.

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

Наведите указатель мыши на ячейку Состояние заблокированной или ожидающей задачи, чтобы увидеть дополнительные сведения о блокировке.

Предупреждение

Окно Задачи сообщает о состоянии взаимоблокировки только для блокированных задач, использующих примитив синхронизации, который поддерживается функцией прохождения цепочки ожидания (Wait Chain Traversal, WCT).Например, для заблокированного объекта Task, использующего WCT, отладчик отображает состояние Ожидание-Блокировка.Для заблокированной задачи, управляемой средой выполнения с параллелизмом, которая не поддерживает WCT, отладчик отображает состояние Ожидание.Дополнительные сведения о функции WCT см. в разделе Прохождение цепочки ожидания.

Время начала

Время, когда задача стала активной.

Длительность

Количество секунд, в течение которого задача была активна.

Время завершения

Время, когда задача была завершена.

Расположение

Текущее расположение в стеке вызова задачи. Наведите указатель мыши на эту ячейку, чтобы увидеть весь стек вызова задачи. У запланированных задач значение в этом столбце отсутствует.

Задача

Исходный метод и какие-либо аргументы, которые были переданы в задачу при ее создании.

Родительский

Идентификатор задачи, создавшей данную задачу. Если эта ячейка пуста, то у задачи нет родительской задачи. Это применимо только для управляемых программ.

Назначение потока

Идентификатор и имя потока, в котором запущена задача.

Состояние возврата

Состояние задачи при ее завершении. Состояние возврата может иметь одно из следующих значений: Success (успешное завершение), Cancelled (отменено) и Error (ошибка).

AppDomain

Для управляемого кода это домен приложения, в котором выполняется задача.

task_group

Для машинного кода это адрес объекта task_group, который запланировал задачу. Для асинхронных агентов и упрощенных задач этот столбец содержит значение 0.

Процесс

Идентификатор процесса, к которому относится выполняемая задача.

Асинхронное состояние

В случае управляемого кода указывает состояние задачи. По умолчанию этот столбец скрыт. Для отображения этого столбца откройте контекстное меню для одного из заголовков столбцов. Выберите Столбцы, AsyncState.

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

Контекстное меню представлений в окне параллельных стеков

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

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

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

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

Группированный режим в окне параллельных задач

Представление родительского и дочернего объектов

(Данное представление доступно только для управляемого кода.) Щелкнув правой кнопкой мыши заголовок столбца и выбрав Представление родительского и дочернего объектов, можно изменить список задач, переведя его в иерархическое представление, в котором каждая дочерняя задача представляет собой вложенный узел, который можно отобразить или скрыть под его родительским узлом. На следующем рисунке показаны задачи в представлении родительского и дочернего объектов.

Представление родительского и дочернего объектов в окне параллельных задач

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

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

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

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

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

Контекстное меню потоков в окне параллельных стеков

См. также

Задачи

Пошаговое руководство. Отладка параллельного приложения

Основные понятия

Среда выполнения с параллелизмом

Использование окна "Параллельные стеки"

Другие ресурсы

Путеводитель по отладчику

Отладка управляемого кода

Параллельное программирование в .NET Framework