Partager via


TaskScheduler.GetScheduledTasks Méthode

Définition

Pour la prise en charge du débogueur uniquement, génère un énumérateur d'instances de Task actuellement en attente d'exécution dans la file d'attente sur le planificateur.

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)

Retours

IEnumerable<Task>

Énumérateur qui autorise un débogueur à parcourir les tâches actuellement mises en file d'attente sur ce planificateur.

Attributs

Exceptions

Ce planificateur ne peut pas générer une liste de tâches en file d'attente actuellement.

Remarques

Une classe dérivée d’implémente TaskScheduler cette méthode afin de prendre en charge l’intégration avec les débogueurs. Cette méthode est appelée uniquement par le .NET Framework lorsque le débogueur demande l’accès aux données. L’énumérable retourné sera parcouru par les utilitaires de débogage pour accéder aux tâches actuellement mises en file d’attente à ce planificateur, ce qui permet au débogueur de fournir une représentation de ces informations dans l’interface utilisateur.

Il est important de noter que, lorsque cette méthode est appelée, tous les autres threads du processus seront gelés. Par conséquent, il est important d’éviter la synchronisation avec d’autres threads qui peuvent entraîner un blocage. Si la synchronisation est nécessaire et que vous ne parvenez pas à acquérir le verrou dans cette méthode, vous devez lever une exception afin que le débogueur ne bloque pas. L’exemple suivant montre une approche possible 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);  
    }}  

En outre, cette méthode et l’énumérable retourné ne doivent modifier aucun état global visible.

L’énumérable retourné ne doit jamais être null. S’il n’existe actuellement aucune tâche en file d’attente, une énumérable vide doit être retournée à la place.

Les développeurs qui implémentent des débogueurs personnalisés ne doivent pas appeler cette méthode directement, mais doivent utiliser la méthode GetScheduledTasksForDebugger wrapper interne à la place : internal Task[] GetScheduledTasksForDebugger() Cette méthode wrapper retourne un tableau de tâches au lieu d’une énumérable. Pour récupérer une liste de planificateurs actifs, utilisez la méthode internal static TaskScheduler[] GetTaskSchedulersForDebugger()interne . Cette méthode statique retourne un tableau de toutes les instances actives TaskScheduler . Vous pouvez ensuite utiliser GetScheduledTasksForDebugger sur chaque instance du planificateur pour récupérer sa liste de tâches planifiées.

S’applique à

Voir aussi