TaskScheduler.GetScheduledTasks Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Für die Debuggerunterstützung wird nur eine Aufzählung von Task Instanzen generiert, die derzeit an den Planer in die Warteschlange gestellt werden, die auf die 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
Eine Aufzählung, die es einem Debugger ermöglicht, die derzeit in der Warteschlange befindlichen Aufgaben für diesen Planer zu durchlaufen.
- Attribute
Ausnahmen
Dieser Zeitplaner kann derzeit keine Liste der in die Warteschlange eingereihten Aufgaben generieren.
Hinweise
Eine von TaskScheduler dieser Methode abgeleitete Klasse implementiert diese Methode, um die Integration mit Debuggern zu unterstützen. Diese Methode wird nur vom .NET Framework aufgerufen, wenn der Debugger Zugriff auf die Daten anfordert. Die zurückgegebene Aufzählung wird durch Das Debuggen von Hilfsprogrammen 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.
Es ist wichtig zu beachten, dass beim Aufrufen dieser Methode alle anderen Threads im Prozess fixiert 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 Enumeration keinen global sichtbaren Zustand ändern.
Die zurückgegebene Enumeration darf 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 Vorgängen anstelle einer aufzählbaren Methode zurück. Verwenden Sie die interne Methode internal static TaskScheduler[] GetTaskSchedulersForDebugger(), um eine Liste der aktiven Scheduler abzurufen. Diese statische Methode gibt ein Array aller aktiven TaskScheduler Instanzen zurück. Anschließend können GetScheduledTasksForDebugger Sie für jede Planerinstanz die Liste der geplanten Vorgänge abrufen.