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

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č v tuto chvíli nemůže vygenerovat seznam úkolů zařazených do fronty.

Poznámky

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

Je důležité poznamenat, že při zavolání této metody budou všechny ostatní vlákna procesu zmrazeny. 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 v této metodě nemůžete získat zámek, 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ě nejsou žádné úlohy 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 obálky GetScheduledTasksForDebugger : internal Task[] GetScheduledTasksForDebugger(). Tato metoda obálky vrátí pole úkolů místo výčtu. 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 pomocí GetScheduledTasksForDebugger každé instance plánovače načíst seznam naplánovaných úloh.

Platí pro

Viz také