TaskScheduler.GetScheduledTasks Metodo

Definizione

Solo per il supporto del debugger, genera un'enumerabile di Task istanze attualmente accodate all'utilità di pianificazione in attesa dell'esecuzione.

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();
[<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)

Valori restituiti

Enumerabile che consente a un debugger di attraversare le attività attualmente in coda a questa utilità di pianificazione.

Attributi

Eccezioni

L'utilità di pianificazione non è in grado di generare un elenco di attività in coda al momento.

Commenti

Una classe derivata da TaskScheduler implementa questo metodo per supportare l'integrazione con i debugger. Questo metodo verrà richiamato solo da .NET Framework quando il debugger richiede l'accesso ai dati. L'enumerabile restituito verrà attraversato dalle utilità di debug per accedere alle attività attualmente in coda a questa utilità di pianificazione, consentendo al debugger di fornire una rappresentazione di queste informazioni nell'interfaccia utente.

È importante notare che, quando questo metodo viene chiamato, tutti gli altri thread del processo verranno bloccati. È quindi importante evitare la sincronizzazione con altri thread che potrebbero causare il blocco. Se è necessaria la sincronizzazione e non è possibile acquisire il blocco in questo metodo, è necessario generare un'eccezione in modo che il debugger non blocchi. L'esempio seguente illustra un approccio possibile 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);
    }}

Inoltre, questo metodo e l'enumerabile restituito non devono modificare alcuno stato visibile a livello globale.

L'enumerabile restituito non deve mai essere Null. Se attualmente non sono presenti attività in coda, deve essere restituito un enumerabile vuoto.

Gli sviluppatori che implementano debugger personalizzati non devono chiamare direttamente questo metodo, ma devono usare invece il metodo GetScheduledTasksForDebugger wrapper interno: internal Task[] GetScheduledTasksForDebugger(). Questo metodo wrapper restituisce una matrice di attività anziché un oggetto enumerabile. Per recuperare un elenco di utilità di pianificazione attive, utilizzare il metodo internal static TaskScheduler[] GetTaskSchedulersForDebugger()interno . Questo metodo statico restituisce una matrice di tutte le istanze attive TaskScheduler . È quindi possibile usare GetScheduledTasksForDebugger in ogni istanza dell'utilità di pianificazione per recuperare il relativo elenco di attività pianificate.

Si applica a

Vedi anche