TaskScheduler.GetScheduledTasks Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Solo por compatibilidad con el depurador, genera un enumerable de las instancias de Task que se encuentran actualmente en la cola del programador a la espera de ser ejecutadas.
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)
Devoluciones
Enumerable que permite a un depurador atravesar las tareas que se encuentran actualmente en la cola de este programador.
- Atributos
Excepciones
Este programador no puede generar una lista de tareas en cola en este momento.
Comentarios
Una clase derivada de TaskScheduler implementa este método para admitir la integración con los depuradores. .NET Framework solo invocará este método cuando el depurador solicite acceso a los datos. La enumerable devuelta se recorrerá mediante la depuración de utilidades para acceder a las tareas actualmente en cola a este programador, lo que permite al depurador proporcionar una representación de esta información en la interfaz de usuario.
Es importante tener en cuenta que, cuando se llama a este método, todos los demás subprocesos del proceso se inmovilizarán. Por lo tanto, es importante evitar la sincronización con otros subprocesos que pueden provocar bloqueos. Si la sincronización es necesaria y no puede adquirir el bloqueo en este método, debe producir una excepción para que el depurador no bloquee. En el ejemplo siguiente se muestra un posible enfoque en 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);
}}
Además, este método y la enumerable devuelta no deben modificar ningún estado visible globalmente.
El enumerador devuelto nunca debe ser NULL. Si actualmente no hay ninguna tarea en cola, se debe devolver un enumerable vacío en su lugar.
Los desarrolladores que implementan depuradores personalizados no deben llamar directamente a este método, pero deben usar el método GetScheduledTasksForDebugger
contenedor interno en su lugar: internal Task[] GetScheduledTasksForDebugger()
. Este método contenedor devuelve una matriz de tareas en lugar de una enumerable. Para recuperar una lista de programadores activos, use el método internal static TaskScheduler[] GetTaskSchedulersForDebugger()
interno . Este método estático devuelve una matriz de todas las instancias activas TaskScheduler . A continuación, puede usar GetScheduledTasksForDebugger
en cada instancia del programador para recuperar su lista de tareas programadas.