Freigeben über


Verwenden des Aufgabenfensters (C#, Visual Basic, C++)

Das Fenster "Aufgaben " ähnelt dem Fenster "Threads ", mit der Ausnahme, dass anstelle jedes Threads Informationen zu System.Threading.Tasks.Task oder task_handle Objekten angezeigt werden. Wie Threads stellen Aufgaben asynchrone Vorgänge dar, die gleichzeitig ausgeführt werden können; Mehrere Aufgaben können jedoch im selben Thread ausgeführt werden.

In verwaltetem Code können Sie das Fenster "Aufgaben " verwenden, wenn Sie mit System.Threading.Tasks.Task Objekten oder mit den await - und asynchronen Schlüsselwörtern arbeiten (Await and Async in VisualBasic). Weitere Informationen zu Aufgaben im verwalteten Code finden Sie unter Parallel Programming.

Im systemeigenen Code können Sie das Aufgabenfenster verwenden, wenn Sie mit Aufgabengruppen, parallelen Algorithmen, asynchronen Agents und einfachen Aufgaben arbeiten. Weitere Informationen zu Aufgaben im systemeigenen Code finden Sie unter Concurrency Runtime.

Sie können das Fenster "Aufgaben " immer dann verwenden, wenn Sie in den Debugger wechseln. Sie können im Menü "Debuggen " darauf zugreifen, indem Sie auf Windows und dann auf "Aufgaben" klicken. Die folgende Abbildung zeigt das Fenster "Aufgaben " im Standardmodus.

Aufgabenfenster

Aufgabenfenster

Hinweis

In verwaltetem Code kann ein Task mit dem Status TaskStatus.Created, TaskStatus.WaitingForActivation oder TaskStatus.WaitingToRun möglicherweise nicht im Fenster Aufgaben angezeigt werden, wenn sich verwaltete Threads in einem Ruhe- oder Wartezustand befinden.

Informationen zur Aufgabenspalte

Die Spalten im Fenster "Aufgaben " zeigen die folgenden Informationen an.

Spaltenname BESCHREIBUNG
Flaggen Zeigt an, welche Vorgänge gekennzeichnet sind, und ermöglicht es Ihnen, einen Vorgang zu kennzeichnen oder aufzuheben.
Symbole Gelber Pfeil Ein gelber Pfeil gibt den aktuellen Vorgang an. Die aktuelle Aufgabe ist die oberste Aufgabe im aktuellen Thread.

Grüner Pfeil Ein grüner Pfeil gibt den aktuellen Debuggerkontext an (nach einem Wechsel zur Aufgabe im Debugger).

Weißer Pfeil Ein weißer Pfeil gibt die unterbrechende Aufgabe an, d. h. die, die beim Aufrufen des Debuggers aktuell war.

Pausensymbol Das Pausensymbol zeigt eine Aufgabe an, die vom Benutzer angehalten wurde. Sie können eine Aufgabe einfrieren und auftauen, indem Sie in der Liste mit der rechten Maustaste darauf klicken.
ID Eine vom System bereitgestellte Nummer für den Vorgang. In systemeigenem Code ist dies die Adresse der Aufgabe.
Status Der aktuelle Status (geplant, aktiv, blockiert, verklemmt, wartend oder abgeschlossen) des Vorgangs.

Geplanter Status Planmäßig. Eine geplante Aufgabe ist eine Aufgabe, die noch nicht ausgeführt wurde und daher noch nicht über einen Aufrufstapel, einen zugewiesenen Thread oder verwandte Informationen verfügt.

Status aktiv Aktiv. Eine aktive Aufgabe ist eine Aufgabe, die Code vor dem Unterbrechen des Debuggers ausführte.

Status blockiert Gesperrt. Eine blockierte Aufgabe ist eine, die blockiert wird, weil sie auf ein Ereignis wartet, das signalisiert wird, eine Sperre losgelassen wird oder eine andere Aufgabe abgeschlossen werden soll.

Status ausstehend Wartend. Eine nicht blockierende, wartende Aufgabe, die das Async/Await-Muster verwendet.

Status deadlocked Festgefahren. Eine blockierte Aufgabe ist eine wartende Aufgabe, deren Thread mit einem anderen Thread blockiert ist.

Fahren Sie mit der Maus über die Status-Zelle einer blockierten oder wartenden Aufgabe, um mehr Informationen über die Blockade anzuzeigen. Warnung: Das Fenster "Aufgaben " meldet deadlock nur für eine blockierte Aufgabe, die einen Synchronisierungsgrundtyp verwendet, der von Wait Chain Traversal (WCT) unterstützt wird. Beispielsweise meldet der Debugger für ein blockiertes Task-Objekt, das WCT verwendet, Awaiting-deadlocked. Für eine blockierte Aufgabe, die von der Concurrency Runtime verwaltet wird, welche nicht WCT verwendet, zeigt der Debugger Warten. Weitere Informationen zu WCT finden Sie unter Wait Chain Traversal.
Startzeit Die Zeit, zu der die Aufgabe aktiv wurde.
Dauer Die Anzahl der Sekunden, die der Vorgang aktiv war.
Abschlusszeit Die Uhrzeit, zu der die Aufgabe abgeschlossen wurde.
Ort Die aktuelle Position im Aufrufstapel der Aufgabe. Bewegen Sie den Mauszeiger über diese Zelle, um den gesamten Aufrufstapel der Aufgabe zu sehen. Geplante Vorgänge haben keinen Wert in dieser Spalte.
Aufgabe Die ursprüngliche Methode und alle Argumente, die beim Erstellen der Aufgabe übergeben wurden.
AsyncState Für verwalteten Code den Aufgabenstatus. Diese Spalte ist standardmäßig ausgeblendet. Um diese Spalte anzuzeigen, öffnen Sie das Kontextmenü für eine der Spaltenüberschriften. Wählen Sie Spalten, AsyncState.
Eltern Die ID des Vorgangs, der diese Aufgabe erstellt hat. Wenn dies leer ist, hat die Aufgabe kein übergeordnetes Element. Dies gilt nur für verwaltete Programme.
Threadzuweisung Die ID und der Name des Threads, auf dem die Aufgabe ausgeführt wird.
AppDomain Bei verwaltetem Code ist die Anwendungsdomäne, in der die Aufgabe ausgeführt wird.
task_group Bei systemeigenem Code die Adresse des task_group Objekts, das den Vorgang geplant hat. Für asynchrone Agents und einfache Aufgaben wird diese Spalte auf 0 festgelegt.
Prozess Die ID des Prozesses, auf dem die Aufgabe ausgeführt wird.

Sie können der Ansicht Spalten hinzufügen, indem Sie mit der rechten Maustaste auf eine Spaltenüberschrift klicken und dann die gewünschten Spalten auswählen. (Entfernen Sie Spalten, indem Sie die Auswahl löschen.) Sie können Spalten auch neu anordnen, indem Sie sie nach links oder rechts ziehen. Das Spaltenverknüpfungsmenü wird in der folgenden Abbildung gezeigt.

Kontextmenü im Fenster

Kontextmenü im Fenster

Sortieren von Aufgaben

Klicken Sie auf die Spaltenüberschrift, um Aufgaben nach Spaltenkriterien zu sortieren. Wenn Sie beispielsweise auf die Spaltenüberschrift "ID " klicken, können Sie die Aufgaben nach Aufgaben-ID sortieren: 1,2,3,4,5 usw. Wenn Sie die Sortierreihenfolge umkehren möchten, klicken Sie erneut auf die Spaltenüberschrift. Die aktuelle Sortierspalte und Sortierreihenfolge wird durch einen Pfeil in der Spalte angegeben.

Gruppieren von Aufgaben

Sie können Aufgaben basierend auf einer beliebigen Spalte in der Listenansicht gruppieren. Wenn Sie beispielsweise mit der rechten Maustaste auf die Spaltenüberschrift "Status " und dann auf "Gruppieren nach>[Status]" klicken, können Sie alle Aufgaben gruppieren, die denselben Status aufweisen. Zum Beispiel könnten Sie schnell auf anstehende Aufgaben blicken, um sich darauf zu konzentrieren, warum sie blockiert sind. Sie können auch eine Gruppe reduzieren, die während der Debugsitzung nicht von Interesse ist. Auf die gleiche Weise können Sie nach den anderen Spalten gruppieren. Eine Gruppe kann (de)markiert werden, indem einfach auf die Schaltfläche neben der Gruppenüberschrift geklickt wird. Die folgende Abbildung zeigt das Fenster "Aufgaben" im gruppierten Modus.

Gruppierter Modus im Fenster

Gruppierter Modus im Fenster

Eltern-Kind-Ansicht

(Diese Ansicht ist nur für verwalteten Code verfügbar.) Wenn Sie mit der rechten Maustaste auf die Spaltenüberschrift "Status " und dann auf " Gruppieren nach>übergeordnetem Element" klicken, können Sie die Aufgabenliste in eine hierarchische Ansicht ändern, in der jede untergeordnete Aufgabe ein Unterknoten ist, der unter dem übergeordneten Element angezeigt oder ausgeblendet werden kann.

Kennzeichnen von Aufgaben

Sie können den Thread, auf dem eine Aufgabe ausgeführt wird, kennzeichnen, indem Sie das Aufgabenlistenelement auswählen und dann Zugeordneten Thread kennzeichnen aus dem Kontextmenü wählen oder indem Sie auf das Flaggensymbol in der ersten Spalte klicken. Wenn Sie mehrere Aufgaben kennzeichnen, können Sie dann nach der Kennzeichnungsspalte sortieren, um alle gekennzeichneten Aufgaben nach oben zu bringen, damit Sie sich nur darauf konzentrieren können. Sie können auch das Fenster "Parallele Stapel" verwenden, um nur gekennzeichnete Vorgänge anzuzeigen. Auf diese Weise können Sie Aufgaben herausfiltern, an denen Sie für das Debuggen nicht interessiert sind. Flags werden zwischen Debugsitzungen nicht gespeichert.

Einfrieren und Auftauen von Aufgaben

Sie können den Thread fixieren, auf dem eine Aufgabe ausgeführt wird, indem Sie mit der rechten Maustaste auf das Aufgabenlistenelement klicken und dann auf " Zugewiesenen Thread fixieren" klicken. (Wenn eine Aufgabe bereits eingefroren ist, lautet der Befehl Thread-Zuweisung aufheben.) Wenn Sie einen Thread einfrieren, wird dieser Thread nicht ausgeführt, wenn Sie den Code nach dem aktuellen Haltepunkt durchlaufen. Der Befehl „Alle Threads außer diesem einfrieren“ friert alle Threads ein, außer dem, der das Aufgabenlistenelement ausführt.

Die folgende Abbildung zeigt die anderen Menüelemente für jede Aufgabe.

Abkürzungsthread-Menü im Fenster

Abkürzungsthread-Menü im Fenster

Wechseln der aktiven Aufgabe oder des Frames

Der Befehl "Zu Aufgabe wechseln" macht den aktuellen Vorgang zur aktiven Aufgabe. Mit dem Befehl "Zu Frame wechseln" wird der ausgewählte Stapelframe zum aktiven Stapelframe. Der Debuggerkontext wechselt zur aktuellen Aufgabe oder zum ausgewählten Stapelframe.