TaskScheduler.GetScheduledTasks Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
É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.