TaskScheduler.GetScheduledTasks Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Solo per il supporto del debugger, genera un oggetto enumerabile di istanze di Task correntemente accodate all'utilità di pianificazione in attesa di 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 ();
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)
Restituisce
Oggetto enumerabile che consente a un debugger l'attraversamento delle attività correntemente accodate all'utilità di pianificazione.
- Attributi
Eccezioni
Questa utilità di pianificazione in questo momento non è in grado di generare un elenco delle attività in coda.
Commenti
Una classe derivata da TaskScheduler implementa questo metodo per supportare l'integrazione con i debugger. Questo metodo verrà richiamato da .NET Framework solo quando il debugger richiede l'accesso ai dati. L'enumerabile restituito verrà attraversato dalle utilità di debug per accedere alle attività attualmente accodate a questa utilità di pianificazione, consentendo al debugger di fornire una rappresentazione di queste informazioni nell'interfaccia utente.
È importante notare che, quando viene chiamato questo metodo, 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 restituita una enumerabile vuota.
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'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.