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


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

Окно Параллельные задачи выглядит как окно Потоки, за исключением того, что отображает сведения о каждой задаче System.Threading.Tasks.Task или объекте task_handle вместо сведений о каждом потоке. Как и потоки, задачи представляют асинхронные операции, которые могут выполняться параллельно; однако несколько задач могут выполняться в одном потоке.

В управляемом коде окно Параллельные задачи можно использовать при работе с объектами System.Threading.Tasks.Task. Дополнительные сведения о задачах в управляемом коде см. в разделе Параллельное программирование в .NET Framework.

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

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

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

Примечание

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

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

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

Имя столбца

Описание

Флаги

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

Значки

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

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

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

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

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

Состояние

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

Запущенная задача – это задача, которая выполняла код, пока не была прервана в отладчике.

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

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

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

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

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

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

Задача

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

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

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

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

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

AppDomain

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

task_group

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

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

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

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

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

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

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

Режим сгруппированных параллельных задач

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

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

Представление "родители-потомки" в окне параллельных задач

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

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

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

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

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

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

См. также

Задачи

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

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

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

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

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

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

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

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

Журнал изменений

Дата

Журнал

Причина

Март 2011

Добавлены сведения о том, как отладчик сообщает о блокировках.

Улучшение информации.