Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
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 |
![]() ![]() ![]() ![]() |
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. ![]() ![]() ![]() ![]() ![]() 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.
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.
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.
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.