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 une énumérable d’instances Task actuellement mises en file d’attente vers le planificateur en attente d’exécution.
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)
Retours
Énumérable qui permet à un débogueur de parcourir les tâches actuellement mises en file d’attente vers ce planificateur.
- Attributs
Exceptions
Ce planificateur ne peut pas générer la liste des tâches en file d’attente pour l’instant.
Remarques
Une classe dérivée d’implémente TaskScheduler cette méthode pour prendre en charge l’intégration avec les débogueurs. Cette méthode est appelée uniquement par l’infrastructure .NET lorsque le débogueur demande l’accès aux données. L’énumérable retourné est 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 susceptibles d’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 pas modifier un état globalement visible.
L’énumérable retourné ne doit jamais être null. S’il n’existe actuellement aucune tâche mise 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’un é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.