Использование окна "Параллельные задачи"
Окно Параллельные задачи выглядит как окно Потоки, за исключением того, что отображает сведения о каждой задаче 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. |
Процесс |
Идентификатор процесса, что задача запущен. |
Состояние Асинхронного |
Для управляемого кода, состояние задачи.По умолчанию этот столбец скрытым.Чтобы отобразить этот столбец, открыть контекстное меню для одного из заголовков столбца.Выберите Столбцы, AsyncState. |
В это представление можно добавлять столбцы, щелкнув правой кнопкой мыши заголовок столбца и выбрав нужные столбцы.(Чтобы удалить столбцы, нужно убрать выбор.) Можно также изменять расположение столбцов, перетаскивая их влево или вправо.На следующем рисунке показано контекстное меню столбца.
Сортировка задач
Чтобы выполнить сортировку задач, щелкните заголовок столбца.Например, если щелкнуть заголовок столбца ИД, то задачи будут отсортированы по их идентификаторам: 1,2,3,4,5 и так далее.Чтобы изменить порядок сортировки, еще раз щелкните заголовок столбца.Текущий столбец сортировки и порядок сортировки указывается стрелкой в столбце.
Группирование задач
Задачи можно группировать на основе любого столбца в представлении списка.Например, если щелкнуть правой кнопкой мыши заголовок столбца Состояние, а затем выбрать Группировать по состоянию, то можно сгруппировать все задачи, имеющие одинаковое состояние.Затем можно быстро просмотреть задачи, находящиеся в определенном состоянии, например в состоянии ожидания, чтобы понять причину их блокировки.Можно также свернуть группу, которая не представляет интереса в текущем сеансе отладки.Таким же образом можно группировать задачи по другим столбцам.Можно установить или удалить пометку группы, просто нажав кнопку рядом с заголовком группы.На следующем рисунке показано окно Параллельные задачи в режиме группирования.
Представление родительского и дочернего объектов
(Данное представление доступно только для управляемого кода.) Щелкнув правой кнопкой мыши заголовок столбца и выбрав Представление родительского и дочернего объектов, можно изменить список задач, переведя его в иерархическое представление, в котором каждая дочерняя задача представляет собой вложенный узел, который можно отобразить или скрыть под его родительским узлом.На следующем рисунке показаны задачи в представлении родительского и дочернего объектов.
Пометка задач
Можно пометить поток задачи, в которой задача выполняется, если щелкнуть правой кнопкой мыши элемент списка задач, а затем щелкните Отметить или щелкнув значок пометить в первом столбце.Если помечается несколько задач, то затем их можно сортировать по столбцу флага, чтобы вывести все помеченные задачи наверх и далее сосредоточиться только на них.Для просмотра только помеченных задач можно также воспользоваться окном Параллельные стеки.Это позволяет отфильтровывать задачи, которые не нужны для отладки.Между сеансами отладки пометки не существуют.
Замораживание и размораживание задач
Чтобы заморозить поток, в котором запущена задача, можно щелкнуть правой кнопкой мыши элемент задачи в списке и выбрать Заморозить назначенный поток.(Если задача уже заморожена, то вместо этого пункта в контекстном меню появляется пункт Разморозить назначенный поток.) Если поток замораживается, то он не будет выполняться при проходе по коду после текущей точки останова.Команда Заморозить все потоки кроме замораживает все потоки, за исключением выполняющего указанный элемент задачи в списке.
На следующем рисунке показаны остальные пункты меню для каждой задачи.
См. также
Задачи
Пошаговое руководство. Отладка параллельного приложения
Основные понятия
Среда выполнения с параллелизмом
Использование окна "Параллельные стеки"