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

Okno Úkoly se podobá okně Vlákna s tím rozdílem, že místo každého vlákna zobrazuje informace o System.Threading.Tasks.Task objektech nebo task_handle . 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.

Ve spravovaném kódu můžete okno Úkoly použít při práci s System.Threading.Tasks.Task objekty nebo s klíčovými slovy await async (Await a Async v sadě VisualBasic). Další informace o úkolech ve spravovaném kódu naleznete v tématu Paralelní programování.

V nativním kódu můžete použít okno Úlohy při práci se skupinami úloh, paralelními algoritmy, asynchronními agenty a jednoduchými úlohami. Další informace o úlohách v nativním kódu najdete v tématu Concurrency Runtime.

Okno Úkoly můžete použít při každém rozdělení do ladicího programu. 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 který má stav TaskStatus.Created, TaskStatus.WaitingForActivation nebo TaskStatus.WaitingToRun , nemusí být zobrazen v okně Úkoly , pokud jsou spravovaná vlákna ve stavu spánku nebo spojení.

Informace o sloupci Úkolů

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

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

Bílá šipka označuje zásadní úkol, tj. ten, který byl aktuální při vyvolání ladicího programu.

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 Aktuální stav (naplánovaný, aktivní, zablokovaný, zablokování, čekání nebo dokončení) úkolu. Naplánovaná úloha je úloha, 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.

Aktivní úkol je úkol, který před přerušením v ladicím programu spouštěl kód.

Čekající nebo blokovaný úkol je úkol, který je zablokovaný, protože čeká na událost, která se má signalizovat, uvolnit zámek nebo jiný úkol, který se má dokončit.

Úlohu zablokování je čekající úloha, jejíž vlákno je zablokované jiným vláknem.

Pokud chcete zobrazit další informace o bloku, najeďte myší na buňku Stav u úkolu, který čeká na zablokování nebo čeká na úkol. Upozornění: Okno Úlohy hlásí zablokování pouze pro blokovanou úlohu, která používá primitivní synchronizaci podporovanou službou Wait Chain Traversal (WCT). Například u objektu s zablokováním Task , který používá WCT, ladicí program hlásí čekání na zablokování. Pro úlohu zablokování spravovanou modulem Concurrency Runtime, která nepoužívá WCT, ladicí program 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.
Místo 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í úkolu. 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 U spravovaného kódu je stav úkolu. 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.
Nadřazený 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 Pro nativní kód adresa task_group objektu, který naplánoval úlohu. 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.

Místní nabídka zobrazení v okně Úkoly

Místní nabídka zobrazení 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 ladicí relace zajímavá. Stejným způsobem můžete seskupit podle ostatních sloupců. Skupinu lze (zrušit)označení 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

Nadřazené podřízené zobrazení

(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

Vlákno můžete označit příznakem úkolu, na kterém je úkol spuštěn, výběrem položky seznamu úkolů a následným výběrem 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ě. K zobrazení pouze úloh s příznakem 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 mezi relacemi ladění neuchovávají.

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 Thaw Assigned Thread.) Při ukotvení vlákna se toto vlákno nespustí při procházení kódu za aktuální zarážkou. Příkaz Ukotvit všechna vlákna, ale tento příkaz zablokuje všechna vlákna s výjimkou vlákna, která spouští položku seznamu úkolů.

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

Místní nabídka vláken v okně Úkoly

Místní 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.