Sdílet prostřednictvím


Použití okna Úkoly (C#, Visual Basic)

Okno Úkoly se podobá okně Vlákna s tím rozdílem, že zobrazuje informace o asynchronních úlohách vytvořených pomocí vzoru async/await, označovaného také jako asynchronní vzor založený na úlohách (TAP) místo informací založených na vláknech. Podobně jako vlákna představují úlohy asynchronní operace, které se můžou spouštět souběžně; Na stejném vlákně však může běžet více úloh.

V kódu .NET můžete při práci s aplikacemi použít okno Úlohy pomocí vzoru async/await (Await a Async v jazyce VisualBasic). Zobrazení Úlohy v okně Paralelní zásobníky je ale často užitečnější pro ladění asynchronních aplikací. Další informace naleznete v tématu Ladění asynchronní aplikace.

V kódu .NET můžete při práci s aplikacemi použít okno Úlohy pomocí vzoru async/await (Await a Async v jazyce VisualBasic). Zobrazení Úlohy v okně Paralelní zásobníky je ale často užitečnější pro ladění asynchronních aplikací. Další informace najdete v tématu Zobrazení vláken a úloh v okně Paralelní zásobníky.

Tip

Pro kód C/C++ použijte zobrazení Vlákna v okně Paralelní zásobníky , pokud potřebujete ladit skupiny úloh, paralelní algoritmy, asynchronní agenty a zjednodušené úlohy. Další informace najdete v tématu Zobrazení vláken a úloh v okně Paralelní zásobníky.

Okno Úkoly můžete použít kdykoliv, když vstoupíte do ladění. Můžete k němu přistupovat v nabídce Ladění kliknutím na Windows a poté klepnutím na příkaz Úkoly. Následující obrázek znázorňuje okno Úkoly ve výchozím režimu.

Okno Úkoly

Okno Úkoly

Poznámka:

Ve spravovaném kódu, Task, jehož stav je TaskStatus.Created, TaskStatus.WaitingForActivation nebo TaskStatus.WaitingToRun, nemusí být zobrazen v okně Tasks, pokud jsou spravovaná vlákna ve stavu spánku nebo čekání na spojení.

Informace o sloupci Úkolů

Sloupce v okně Úkoly zobrazují následující informace.

Název sloupce Popis
Vlajky Ukazuje, které úkoly jsou označeny příznakem a umožňují označit nebo zrušit označení úkolu.
ikony Žlutá šipka Žlutá šipka označuje aktuální úkol. Aktuální úkol je nejvyšší úlohou v aktuálním vlákně.

Zelená šipka Zelená šipka označuje aktuální kontext ladicího programu (po přepnutí na úlohu v ladicím programu).

Bílá šipka Bílá šipka označuje přerušený úkol, tj. ten, který byl aktuální při vyvolání debuggeru.

Ikona Pozastavit Ikona pozastavení označuje úkol, který uživatel zablokoval. Úkol můžete ukotvit a odblokovat tak, že na něj kliknete pravým tlačítkem myši v seznamu.
ID Systémové číslo úkolu. V nativním kódu je to adresa úlohy.
Stav cs-CZ: Aktuální stav (naplánovaný, aktivní, zablokovaný, mrtvý bod, čekající nebo dokončený) úkolu.

Stav Plánováno Plánováno. Naplánovaná úloha je ta, která ještě nebyla spuštěna, a proto ještě nemá zásobník volání, přiřazené vlákno nebo související informace.

Stav aktivní Aktivní. Aktivní operace je operace, která před přerušením v ladicím nástroji spouštěla kód.

Stav je zablokovaný Blokovaný. Blokovaný úkol je blokovaný, protože čeká na signalizační událost, uvolnění zámku nebo dokončení jiného úkolu.

Stav čekání Čekání. Neblokující a čekající úloha, která používá vzor async/await.

Stav Zablokován Zablokováno. Symbol vzájemného zablokování odkazuje na čekající úlohu, jejíž přidružené vlákno je zablokované jiným vláknem.

Když najedete myší na buňku Stav , zobrazí se další informace o bloku. Varování: Okno Úkoly hlásí zablokování pouze pro blokovanou úlohu, která používá primitivní synchronizaci podporovanou aplikací Wait Chain Traversal (WCT). Například u zablokovaného Task objektu, který používá WCT, ladicí program hlásí čekání na zablokovaný stav. U zablokované úlohy, která je spravována modulem Concurrency Runtime, který nepoužívá WCT, ladicí nástroj hlásí Čekání. Další informace o WCT naleznete v tématu Wait Chain Traversal.
Počáteční čas Čas, kdy se úkol stal aktivním.
Doba trvání Počet sekund, po které byl úkol aktivní.
Čas dokončení Čas dokončení úkolu.
Umístění Aktuální umístění v zásobníku volání úkolu. Najeďte myší na tuto buňku, aby se zobrazil celý zásobník volání pro úkol. Naplánované úkoly nemají v tomto sloupci hodnotu.
Úkol Počáteční metoda a všechny argumenty, které byly předány úkolu při jeho vytvoření.
AsyncState Stav úkolu pro spravovaný kód. Ve výchozím nastavení je tento sloupec skrytý. Chcete-li zobrazit tento sloupec, otevřete místní nabídku pro jedno ze záhlaví sloupců. Zvolte Sloupce, AsyncState.
Rodič ID úlohy, která vytvořila tento úkol. Pokud je tato hodnota prázdná, úkol nemá nadřazený objekt. To platí jenom pro spravované programy.
Přiřazení vlákna ID a název vlákna, na kterém je úloha spuštěná.
AppDomain U spravovaného kódu je doména aplikace, ve které se úloha spouští.
task_group V případě nativního kódu adresa task_group objektu, který úkol naplánoval. U asynchronních agentů a jednoduchých úloh je tento sloupec nastavený na hodnotu 0.
Proces ID procesu, na kterém je úloha spuštěná.

Sloupce můžete do zobrazení přidat tak, že kliknete pravým tlačítkem myši na záhlaví sloupce a vyberete požadované sloupce. (Odeberte sloupce zrušením výběru.) Sloupce můžete také změnit přetažením doleva nebo doprava. Místní nabídka sloupce je zobrazená na následujícím obrázku.

Nabídka zobrazení zkratek v okně Úkoly

Nabídka zobrazení zkratek v okně Úkoly

Řazení úkolů

Pokud chcete úkoly seřadit podle kritérií sloupce, klikněte na záhlaví sloupce. Například kliknutím na záhlaví sloupce ID můžete úkoly seřadit podle ID úkolu: 1,2,3,4,5 atd. Pokud chcete pořadí řazení vrátit zpět, klikněte znovu na záhlaví sloupce. Aktuální sloupec řazení a pořadí řazení je označen šipkou ve sloupci.

Seskupování úkolů

Úkoly můžete seskupit podle libovolného sloupce v zobrazení seznamu. Například tak, že kliknete pravým tlačítkem na záhlaví sloupce Stav a potom kliknete na Seskupit podle>[stav], můžete seskupit všechny úkoly se stejným stavem. Například můžete rychle vidět čekající úkoly, abyste se mohli zaměřit na to, proč jsou blokované. Můžete také sbalit skupinu, která není během relace ladění zajímavá. Stejným způsobem můžete seskupit podle ostatních sloupců. Skupinu lze (od)označit příznakem tak, že kliknete na tlačítko vedle záhlaví skupiny. Následující obrázek znázorňuje okno Úkoly v seskupeném režimu.

Seskupený režim v okně Úkoly

Seskupený režim v okně Úkoly

Zobrazení Rodič a Dítě

(Toto zobrazení je dostupné jenom pro spravovaný kód.) Když kliknete pravým tlačítkem myši na záhlaví sloupce Stav a potom kliknete na Seskupit podle>nadřazeného objektu, můžete změnit seznam úkolů na hierarchické zobrazení, ve kterém je každý podřízený úkol pod uzlem, který se dá zobrazit nebo skrýt pod nadřazenou položkou.

Označení úkolů příznakem

Můžete označit úkol ve vlákně výběrem položky v seznamu úkolů a následným zvolením možnosti Označit přiřazené vlákno z místní nabídky nebo kliknutím na ikonu příznaku v prvním sloupci. Pokud označíte příznakem několik úkolů, můžete řadit podle sloupce příznaku, aby se všechny úkoly označené příznakem přenesly na začátek, abyste se mohli soustředit jenom na ně. Pro zobrazení pouze označených úloh můžete použít okno Paralelní zásobníky. Díky tomu můžete vyfiltrovat úlohy, které vás nezajímají při ladění. Příznaky se neuchovávají mezi sezeními ladění.

Zmrazení a rozmrazování úkolů

Vlákno, na kterém je úloha spuštěna, můžete ukotvit tak, že kliknete pravým tlačítkem myši na položku seznamu úkolů a potom kliknete na Ukotvit přiřazené vlákno. (Pokud je úkol již zablokovaný, příkaz je přiřazené vlákno Thaw.) Při ukotvení vlákna se toto vlákno nespustí při procházení kódu za aktuální zarážkou. Příkaz Zmrazit všechna vlákna kromě tohoto zablokuje všechna vlákna s výjimkou toho, které provádí položku seznamu úkolů.

Následující obrázek znázorňuje ostatní položky nabídky pro každý úkol.

Rychlá nabídka vláken v okně Úkoly

Rychlá nabídka vláken v okně Úkoly

Přepnutí aktivního úkolu nebo rámce

Příkaz Přepnout na úkol nastaví aktuální úkol jako aktivní úkol. Příkaz Přepnout na rámec nastaví vybraný rámec zásobníku na aktivní rámec zásobníku. Kontext ladicího programu se přepne na aktuální úlohu nebo vybraný rámec zásobníku.