Verwenden des Fensters "Parallele Aufgaben"

Das Fenster Parallele Aufgaben ähnelt dem Fenster Threads. In diesem Fenster werden jedoch Informationen zu jedem System.Threading.Tasks.Task oder task_handle-Objekt, anstatt für die einzelnen Threads angezeigt. Wie Threads stellen auch Aufgaben asynchrone Vorgänge dar, die gleichzeitig ausgeführt werden können. Es dürfen jedoch mehrere Aufgaben im selben Thread ausgeführt werden.

In verwaltetem Code können Sie das Fenster Parallele Aufgaben verwenden, wenn Sie mit System.Threading.Tasks.Task-Objekten arbeiten. Weitere Informationen zu Aufgaben in verwaltetem Code finden Sie unter Parallele Programmierung in .NET Framework.

In systemeigenem Code können Sie das Fenster Parallele Aufgaben verwenden, wenn Sie mit Aufgabengruppen, parallelen Algorithmen, asynchronen Agents und einfachen Aufgaben arbeiten. Weitere Informationen zu Aufgaben in systemeigenem Code finden Sie unter Concurrency Runtime.

Sie können das Fenster Parallele Aufgaben immer dann verwenden, wenn die Ausführung im Debugger unterbrochen wird. Sie können darauf zugreifen, indem Sie im Menü Debuggen auf Fenster und anschließend auf Parallele Aufgaben klicken. In der folgenden Abbildung wird das Fenster Parallele Aufgaben im Standardmodus dargestellt.

Fenster "Parallele Aufgaben"

Tipp

In verwaltetem Code wird eine Task mit dem Status Created, WaitingForActivation oder WaitingToRun im Fenster "Parallele Aufgaben" möglicherweise nicht angezeigt, wenn sich der Thread, in dem der Code erstellt oder geplant wurde, in einem Standby- oder Verknüpfungszustand befindet.

Spalteninformationen in Parallele Aufgaben

In den Spalten im Fenster Parallele Aufgaben werden die folgenden Informationen angezeigt.

Spaltenname

Beschreibung

Flags

Zeigt an, welche Aufgaben gekennzeichnet sind. Zudem können Sie Aufgaben kennzeichnen bzw. deren Kennzeichnung aufheben.

Symbole

Ein gelber Pfeil gibt die aktuelle Aufgabe an. Die aktuelle Aufgabe ist die oberste Aufgabe im aktuellen Thread.

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

Das Pausensymbol gibt eine Aufgabe an, die vom Benutzer eingefroren wurde. Sie können eine Aufgabe einfrieren und deaktivieren, indem Sie in der Liste mit der rechten Maustaste darauf klicken.

ID

Eine vom System bereitgestellte Nummer für die Aufgabe. In systemeigenem Code ist diese Nummer die Adresse der Aufgabe.

Status

Der aktuelle Zustand der Aufgabe (geplant, ausgeführt, blockiert oder wartend). Eine geplante Aufgabe wurde noch nicht ausgeführt und verfügt daher noch über keine Aufrufliste, keinen zugewiesenen Thread oder weitere Informationen.

Eine ausgeführte Aufgabe ist eine Aufgabe, die vor dem Unterbrechen im Debugger Code ausgeführt hat.

Eine wartende Aufgabe ist blockiert, da sie auf das Signalisieren eines Ereignisses, das Aufheben einer Sperre oder das Abschließen einer anderen Aufgabe wartet.

Eine blockierte Aufgabe ist eine wartende Aufgabe, deren Thread an einem anderen Thread blockiert ist.

Zeigen Sie auf die Statuszelle für eine blockierte oder wartende Aufgabe, um weitere Informationen zum Block anzuzeigen.

HinweisHinweis
Im Fenster Parallele Aufgaben werden Deadlocks nur für eine blockierte Aufgabe gemeldet, bei der eine Synchronisierungsprimitive verwendet wird, die von Wait Chain Traversal (WCT) unterstützt wird.Für ein Task-Objekt mit Deadlock, für das WCT verwendet wird, meldet der Debugger Waiting-deadlocked.Für eine Aufgabe mit Deadlock, die von der Concurrency Runtime verwaltet wird, die nicht WCT verwendet, meldet der Debugger Warten.Weitere Informationen zu WCT finden Sie unter Wait Chain Traversal.

Speicherort

Die aktuelle Position in der Aufrufliste der Aufgabe. Zeigen Sie auf diese Zelle, um die gesamte Aufrufliste für die Aufgabe anzuzeigen. Für geplante Aufgaben ist in dieser Spalte kein Wert vorhanden.

Aufgabe

Die ursprüngliche Methode und Argumente, die beim Erstellen an die Aufgabe übergeben wurden.

Parent (Übergeordnet)

Die ID der Aufgabe, von der diese Aufgabe erstellt wurde. Wenn diese Spalte leer ist, verfügt die Aufgabe über kein übergeordnetes Element. Dies gilt nur für verwaltete Programme.

Threadzuweisung

Die ID und der Name des Threads, in dem die Aufgabe ausgeführt wird.

AppDomain

Für verwalteten Code die Anwendungsdomäne, in der die Aufgabe ausgeführt wird.

task_group

Für systemeigenen Code die Adresse des task_group-Objekts, von dem die Aufgabe geplant wurde. Für asynchrone Agents und einfache Aufgaben wird diese Spalte auf 0 festgelegt.

Sie können der Ansicht Spalten hinzufügen, indem Sie mit der rechten Maustaste auf eine Spaltenüberschrift klicken und die gewünschten Spalten auswählen. (Entfernen Sie Spalten, indem Sie die jeweilige Auswahl aufheben.) Sie können auch die Anordnung der Spalten ändern, indem Sie sie nach links oder rechts ziehen. Das Kontextmenü für Spalten wird in der folgenden Abbildung veranschaulicht.

Kontextmenü "Parallele Aufgaben"

Sortieren von Aufgaben

Wenn Sie Aufgaben nach Spaltenkriterien sortieren möchten, klicken Sie auf den Spaltenheader. Wenn Sie z. B. auf den Spaltenheader ID klicken, können Sie die Aufgaben nach Aufgaben-ID sortieren: 1,2,3,4,5 usw. Klicken Sie erneut auf den Spaltenheader, um die Sortierreihenfolge umzukehren. Die aktuelle Sortierspalte und die Sortierreihenfolge werden durch einen Pfeil in der Spalte angegeben.

Gruppieren von Aufgaben

Sie können Aufgaben nach jeder Spalte in der Listenansicht gruppieren. Wenn Sie beispielsweise mit der rechten Maustaste auf den Spaltenheader Status klicken und anschließend auf Gruppieren nach Status klicken, können Sie alle Aufgaben gruppieren, die denselben Status aufweisen. So können Sie z. B. schnell wartende Aufgaben anzeigen lassen, damit Sie untersuchen können, aus welchen Gründen diese blockiert sind. Sie können auch Gruppen reduzieren, die während der Debugsitzung nicht von Interesse sind. Auf die gleiche Weise können Sie nach den anderen Spalten gruppieren. Eine Gruppe kann gekennzeichnet bzw. die Kennzeichnung einer Gruppe kann aufgehoben werden, indem Sie auf die Schaltfläche neben dem Gruppenheader klicken. In der folgenden Abbildung wird das Fenster Parallele Aufgaben im gruppierten Modus dargestellt.

Parallele Aufgaben - Gruppierter Modus

Ansicht über- und untergeordneter Elemente

(Diese Ansicht ist nur für verwalteten Code verfügbar.) Wenn Sie mit der rechten Maustaste auf eine Spaltenüberschrift klicken und anschließend auf Ansicht über- und untergeordneter Elemente klicken, können Sie die Liste der Aufgaben in eine hierarchische Ansicht ändern, in der jede untergeordnete Aufgabe einen Unterknoten darstellt, der unter seinem übergeordneten Element ein- bzw. ausgeblendet werden kann. In der folgenden Abbildung werden die Aufgaben in der Ansicht übergeordneter und untergeordneter Elemente angezeigt.

Parallele Aufgaben, Ansicht mit über- und untergeordneten Elementen

Kennzeichnen von Aufgaben

Sie können eine Aufgabe kennzeichnen, indem Sie mit der rechten Maustaste auf das Aufgabenlistenelement klicken und anschließend auf Flag klicken. Sie können auch auf das Flagsymbol in der ersten Spalte klicken. Wenn Sie mehrere Aufgaben kennzeichnen, können Sie nach der Flagspalte sortieren, um alle gekennzeichneten Aufgaben an oberster Stelle anzuzeigen, sodass Sie sich auf die betreffenden Aufgaben konzentrieren können. Sie können auch das Fenster Parallele Stapel verwenden, um ausschließlich gekennzeichnete Aufgaben anzuzeigen. Damit können Sie Aufgaben herausfiltern, die für das Debugging nicht von Interesse sind. Flags werden nicht zwischen Debugsitzungen beibehalten.

Einfrieren und Reaktivieren von Aufgaben

Sie können den Thread einfrieren, in dem eine Aufgabe ausgeführt wird. Klicken Sie dazu mit der rechten Maustaste auf das Aufgabenlistenelement, und klicken Sie anschließend auf Zugewiesenen Thread einfrieren. (Wenn eine Aufgabe bereits eingefroren ist, heißt der Befehl Zugewiesenen Thread entsperren.) Wenn Sie einen Thread einfrieren, wird dieser Thread nicht ausgeführt, wenn Sie Code nach dem aktuellen Haltepunkt schrittweise durchlaufen. Durch den Befehl Alle Threads mit Ausnahme des vorliegenden einfrieren werden alle Threads mit Ausnahme des Threads eingefroren, der das Aufgabenlistenelement ausführt.

In der folgenden Abbildung werden die anderen Menüelemente für die einzelnen Aufgaben angezeigt.

Kontextmenü "Parallele Aufgaben"

Siehe auch

Aufgaben

Verwenden des Fensters "Parallele Stapel"

Exemplarische Vorgehensweise: Debuggen einer parallelen Anwendung

Konzepte

Parallele Programmierung in .NET Framework

Concurrency Runtime

Weitere Ressourcen

Debuggerwegweiser

Debuggen von verwaltetem Code

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

März 2011

Informationen zur Meldung von Deadlocks durch den Debugger wurden hinzugefügt.

Informationsergänzung.