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č 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ů.