TaskScheduler.GetScheduledTasks Metoda

Definice

Pouze pro podporu ladicího programu vygeneruje výčet Task instancí aktuálně zařazených do fronty plánovače, který čeká na spuštění.

protected:
 abstract System::Collections::Generic::IEnumerable<System::Threading::Tasks::Task ^> ^ GetScheduledTasks();
[System.Security.SecurityCritical]
protected abstract System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task> GetScheduledTasks ();
protected abstract System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task>? GetScheduledTasks ();
protected abstract System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task> GetScheduledTasks ();
[<System.Security.SecurityCritical>]
abstract member GetScheduledTasks : unit -> seq<System.Threading.Tasks.Task>
abstract member GetScheduledTasks : unit -> seq<System.Threading.Tasks.Task>
Protected MustOverride Function GetScheduledTasks () As IEnumerable(Of Task)

Návraty

IEnumerable<Task>

Výčet, který umožňuje ladicím programu procházet úkoly aktuálně zařazené do fronty tohoto plánovače.

Atributy

Výjimky

Tento plánovač nemůže vygenerovat seznam úkolů zařazených do fronty v tuto chvíli.

Poznámky

Třída odvozená z TaskScheduler implementuje tuto metodu, aby podporovala integraci s ladicím programem. Tato metoda bude vyvolána pouze rozhraním .NET Framework, když ladicí program požádá o přístup k datům. Vrácený výčet bude procházený laděním nástrojů pro přístup k úkolům aktuálně zařazeným do tohoto plánovače a umožní ladicím programu poskytnout reprezentaci těchto informací v uživatelském rozhraní.

Je důležité si uvědomit, že při volání této metody budou zablokovaná všechna ostatní vlákna v procesu. Proto je důležité se vyhnout synchronizaci s jinými vlákny, které můžou vést k blokování. Pokud je potřeba synchronizace a nemůžete získat zámek v této metodě, měli byste vyvolat výjimku, aby ladicí program neblokoval. Následující příklad ukazuje jeden možný přístup v jazyce C#:

protected override IEnumerable<Task> GetScheduledTasks()  
{  
    bool lockTaken = false;  
    try  
    {  
        Monitor.TryEnter(_syncObj, ref lockTaken);  
        if (lockTaken)  
        {  
            return _tasks.ToArray();  
        }  
        else throw new NotSupportedException();  
    }  
    finally  
    {  
    if (lockTaken) Monitor.Exit(_syncObj);  
    }}  

Kromě toho tato metoda a vrácená výčet nesmí upravovat žádný globálně viditelný stav.

Vrácený výčet by nikdy neměl být null. Pokud aktuálně neexistují žádné úkoly ve frontě, měl by se místo toho vrátit prázdný výčet.

Vývojáři, kteří implementují vlastní ladicí programy, by neměli tuto metodu volat přímo, ale místo toho by měli použít interní metodu GetScheduledTasksForDebugger obálky: internal Task[] GetScheduledTasksForDebugger(). Tato metoda obálky vrátí místo výčtu pole úkolů. Chcete-li načíst seznam aktivních plánovačů, použijte interní metodu internal static TaskScheduler[] GetTaskSchedulersForDebugger(). Tato statická metoda vrátí pole všech aktivních TaskScheduler instancí. Pak můžete použít GetScheduledTasksForDebugger pro každou instanci plánovače k načtení seznamu naplánovaných úkolů.

Platí pro

Viz také