TaskScheduler.GetScheduledTasks Methode

Definition

Nur für Debuggerunterstützung: Generiert eine Enumeration von Task-Instanzen, die sich gegenwärtig in der Warteschlange des Taskplaners befinden und auf ihre Ausführung warten.

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)

Gibt zurück

IEnumerable<Task>

Eine Aufzählung, in der von einem Debugger die gegenwärtig in der Warteschlange dieses Taskplaners enthaltenen Aufgaben durchsucht werden können.

Attribute

Ausnahmen

Dieser Planer kann derzeit keine Liste in der Warteschlange stehender Aufgaben generieren.

Hinweise

Eine von dieser Methode abgeleitete TaskScheduler Klasse implementiert diese Methode, um die Integration mit Debuggern zu unterstützen. Diese Methode wird nur von der .NET Framework aufgerufen, wenn der Debugger zugriff auf die Daten anfordert. Die aufzählbare Zurückgegebene wird durch Debugging-Dienstprogramme durchlaufen, um auf die aufgaben zuzugreifen, die derzeit an diesen Zeitplan in die Warteschlange gestellt werden, sodass der Debugger eine Darstellung dieser Informationen auf der Benutzeroberfläche bereitstellt.

Beachten Sie, dass, wenn diese Methode aufgerufen wird, alle anderen Threads im Prozess eingefroren werden. Daher ist es wichtig, die Synchronisierung mit anderen Threads zu vermeiden, die zu einer Blockierung führen können. Wenn die Synchronisierung erforderlich ist und Sie die Sperre in dieser Methode nicht abrufen können, sollten Sie eine Ausnahme auslösen, damit der Debugger nicht blockiert wird. Das folgende Beispiel zeigt einen möglichen Ansatz in 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);  
    }}  

Darüber hinaus darf diese Methode und die zurückgegebene Aufzählung keinen global sichtbaren Zustand ändern.

Die zurückgegebene Aufzählung sollte niemals null sein. Wenn derzeit keine Aufgaben in der Warteschlange vorhanden sind, sollte stattdessen eine leere Aufzählung zurückgegeben werden.

Entwickler, die benutzerdefinierte Debugger implementieren, sollten diese Methode nicht direkt aufrufen, sondern stattdessen die interne Wrappermethode GetScheduledTasksForDebugger verwenden: internal Task[] GetScheduledTasksForDebugger() Diese Wrappermethode gibt ein Array von Aufgaben anstelle einer Aufzählung zurück. Verwenden Sie die interne Methode internal static TaskScheduler[] GetTaskSchedulersForDebugger(), um eine Liste aktiver Zeitplaner abzurufen. Diese statische Methode gibt ein Array aller aktiven TaskScheduler Instanzen zurück. Anschließend können GetScheduledTasksForDebugger Sie für jede Zeitplaninstanz die Liste der geplanten Vorgänge abrufen.

Gilt für

Siehe auch