Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Okno Zadania przypomina okno Wątki , z tą różnicą, że zawiera informacje o System.Threading.Tasks.Task obiektach lub task_handle zamiast każdego wątku. Podobnie jak wątki, zadania reprezentują operacje asynchroniczne, które mogą być uruchamiane współbieżnie; jednak wiele zadań może być uruchamianych w tym samym wątku.
W kodzie zarządzanym można użyć okna Zadania podczas pracy z obiektami System.Threading.Tasks.Task lub ze słowami kluczowymi await i async (Await i Async w programie VisualBasic). Aby uzyskać więcej informacji na temat zadań w kodzie zarządzanym, zobacz Programowanie równoległe.
W kodzie natywnym można użyć okna Zadania podczas pracy z grupami zadań, algorytmami równoległymi, agentami asynchronicznymi i zadaniami uproszczonymi. Aby uzyskać więcej informacji na temat zadań w kodzie natywnym, sprawdź Concurrency Runtime.
Możesz użyć okna Zadania za każdym razem, gdy włamiesz się do debugera. Dostęp do niego można uzyskać w menu Debugowanie , klikając pozycję Windows , a następnie klikając pozycję Zadania. Poniższa ilustracja przedstawia okno Zadania w trybie domyślnym.
Uwaga / Notatka
W kodzie zarządzanym, gdy wątki zarządzane są w stanie uśpienia lub sprzężenia, obiekt o statusie Task, TaskStatus.WaitingForActivation lub TaskStatus.WaitingToRun może nie być wyświetlany w oknie Zadania.
Informacje o kolumnie zadań
Kolumny w oknie Zadania zawierają następujące informacje.
Nazwa kolumny | Opis |
---|---|
flagi | Pokazuje, które zadania są oflagowane i umożliwia flagowanie lub usunięcie oznaczenia zadania. |
Ikony |
![]() ![]() ![]() ![]() |
identyfikator | Podany przez system numer zadania. W kodzie natywnym jest to adres zadania. |
Stan | Bieżący stan (zaplanowany, aktywny, zablokowany, zakleszczony, oczekujący lub ukończony) zadania. ![]() ![]() ![]() ![]() ![]() Zatrzymaj wskaźnik myszy na komórce Stan dla zakleszczenia lub oczekującego zadania, aby wyświetlić więcej informacji o bloku. Ostrzeżenie: Okno Zadania zgłasza zakleszczenie tylko dla zablokowanego zadania, które używa prymitywu synchronizacji obsługiwanego przez Przewijanie Łańcucha Oczekiwania (WCT). Na przykład w przypadku zakleszczonego Task obiektu, który używa protokołu WCT, debuger raportuje Awaiting-deadlocked. W przypadku zakleszczonego zadania zarządzanego przez Concurrency Runtime, które nie używa WCT, debuger zgłasza Oczekiwanie. Aby uzyskać więcej informacji na temat WCT, zobacz Przechodzenie łańcucha oczekiwania. |
Godzina rozpoczęcia | Czas, w którym zadanie stało się aktywne. |
Czas trwania | Liczba sekund, przez które zadanie zostało aktywne. |
Czas ukończenia | Czas, w którym zadanie zostało ukończone. |
Lokalizacja | Bieżąca lokalizacja w stosie wywołań zadania. Umieść kursor na tej komórce, aby wyświetlić cały stos wywołań zadania. Zaplanowane zadania nie mają wartości w tej kolumnie. |
Zadanie | Metoda początkowa i wszystkie argumenty, które zostały przekazane do zadania podczas jego tworzenia. |
AsyncState | Dla kodu zarządzanego, status realizacji zadania. Domyślnie ta kolumna jest ukryta. Aby wyświetlić tę kolumnę, otwórz menu kontekstowe dla jednego z nagłówków kolumn. Wybierz Kolumny, AsyncState. |
nadrzędne | Identyfikator zadania, które utworzyło to zadanie. Jeśli jest to puste, zadanie nie ma elementu nadrzędnego. Dotyczy to tylko programów zarządzanych. |
Przypisanie wątku | Identyfikator i nazwa wątku, na którym jest uruchomione zadanie. |
Domena aplikacji | W przypadku kodu zarządzanego domena aplikacji, w której jest wykonywane zadanie. |
task_group | W przypadku kodu natywnego adres obiektu task_group , który planował zadanie. W przypadku agentów asynchronicznych i lekkich zadań ta kolumna ma wartość 0. |
Proces | Identyfikator procesu, na którym jest uruchomione zadanie. |
Możesz dodać kolumny do widoku, klikając prawym przyciskiem myszy nagłówek kolumny, a następnie wybierając odpowiednie kolumny. (Usuń kolumny, usuwając zaznaczenie). Możesz również zmienić kolejność kolumn, przeciągając je w lewo lub w prawo. Menu skrótów kolumn jest pokazane na poniższej ilustracji.
Sortowanie zadań
Aby posortować zadania według kryteriów kolumny, kliknij nagłówek kolumny. Na przykład klikając nagłówek kolumny ID , można sortować zadania według identyfikatora zadania: 1,2,3,4,5 itd. Aby odwrócić kolejność sortowania, kliknij ponownie nagłówek kolumny. Bieżąca kolumna sortowania i kolejność sortowania są wskazywane przez strzałkę w kolumnie.
Grupowanie zadań
Zadania można grupować na podstawie dowolnej kolumny w widoku listy. Na przykład klikając prawym przyciskiem myszy nagłówek kolumny Stan , a następnie klikając pozycję Grupuj według>[status], możesz zgrupować wszystkie zadania, które mają ten sam stan. Możesz na przykład szybko zobaczyć oczekujące zadania, aby skoncentrować się na tym, dlaczego są blokowane. Podczas sesji debugowania możesz również zwinąć grupę, która cię nie interesuje. W ten sam sposób można grupować według innych kolumn. Grupę można oznaczyć jako (nie)oflagowaną, klikając przycisk obok nagłówka grupy. Poniższa ilustracja przedstawia okno Zadania w trybie zgrupowanym.
Widok relacji rodzic-dziecko
(Ten widok jest dostępny tylko dla kodu zarządzanego). Klikając prawym przyciskiem myszy nagłówek kolumny Stan, a następnie klikając pozycję Grupuj według> elementu nadrzędnego, możesz zmienić listę zadań na widok hierarchiczny, w którym każde zadanie podrzędne jest podwęzłem, które można wyświetlić lub ukryć pod jego elementem nadrzędnym.
Flagowanie zadań
Możesz oznaczyć wątek, na którym jest uruchomione zadanie, wybierając element z listy zadań, a następnie wybierając opcję Oznacz Przypisany Wątek z menu kontekstowego lub klikając ikonę flagi w pierwszej kolumnie. Jeśli oznaczysz kilka zadań, możesz posortować według kolumny flagi, co pozwoli przenieść wszystkie oflagowane zadania do góry, aby skoncentrować się tylko na nich. Możesz również użyć okna Stosy równoległe, aby wyświetlić tylko oznaczone zadania. Dzięki temu można odfiltrować zadania, którymi nie jesteś zainteresowany podczas debugowania. Flagi nie są utrwalane między sesjami debugowania.
Zadania zamrażania i rozmrażania
Możesz zablokować wątek, na którym jest uruchomione zadanie, klikając prawym przyciskiem myszy element listy zadań, a następnie klikając pozycję Zablokowanie przypisanego wątku. (Jeśli zadanie jest już zamrożone, polecenie to Thaw Assigned Thread). Po zablokowaniu wątku ten wątek nie będzie wykonywany podczas przechodzenia przez kod po bieżącym punkcie przerwania. Zamroź wszystkie wątki poza tym komenda zawiesza wszystkie wątki z wyjątkiem tego, który wykonuje element listy zadań.
Na poniższej ilustracji przedstawiono inne elementy menu dla każdego zadania.
Przełączanie aktywnego zadania lub ramki
Polecenie Przełącz na zadanie sprawia, że bieżące zadanie jest aktywne. Polecenie Przełącz na ramkę powoduje, że wybrana ramka stosu staje się aktywną ramką stosu. Kontekst debugera przełącza się do bieżącego zadania lub wybranej ramki na stosie.