TaskScheduler.GetScheduledTasks Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.