Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método TaskScheduler.GetScheduledTasks ()

 

Publicado: octubre de 2016

Depurador de compatibilidad sólo, genera un enumerable de Task instancias actualmente en la cola del programador esperando para ejecutarse.

Espacio de nombres:   System.Threading.Tasks
Ensamblado:  mscorlib (en mscorlib.dll)

[SecurityCriticalAttribute]
protected abstract IEnumerable<Task> GetScheduledTasks()

Valor devuelto

Type: System.Collections.Generic.IEnumerable<Task>

Enumerable que permite a un depurador atravesar las tareas actualmente en la cola de este programador.

Exception Condition
NotSupportedException

Este programador no pudo generar una lista de tareas en cola en este momento.

Una clase derivada de TaskScheduler implementa este método para admitir la integración con depuradores. .NET Framework solo invocará este método cuando el depurador solicita acceso a los datos. El enumerable devuelto se atraviesa utilidades para tener acceso a las tareas de depuración actualmente en la cola de 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, se bloquearán todos los otros subprocesos del proceso. Por lo tanto, es importante evitar la sincronización con otros subprocesos que puede producir un bloqueo. Si es necesaria la sincronización y no puede adquirir el bloqueo en este método, debe iniciar una excepción para que el depurador no se bloquea. 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 el enumerable devuelto no debe modificar cualquier estado visible globalmente.

El enumerable no devuelto nunca debería ser null. Si no hay actualmente ninguna tarea en cola, debe devolverse un enumerable vacío en su lugar.

Los desarrolladores que están implementando depuradores personalizados no debe llamar directamente a este método, pero debe utilizar el método de contenedor interna GetScheduledTasksForDebugger en su lugar: internal Task[] GetScheduledTasksForDebugger(). Este método contenedor devuelve una matriz de tareas en lugar de un enumerable. Para recuperar una lista de programadores activos, utilice el método interno internal static TaskScheduler[] GetTaskSchedulersForDebugger(). Este método estático devuelve una matriz de todos los activos TaskScheduler instancias. A continuación, puede usar GetScheduledTasksForDebugger en cada instancia del programador para recuperar su lista de tareas programadas.

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 4.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 5.0
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: