5

J'utilise la bibliothèque de tâches pour mon service de compression d'image. Je voudrais compresser plusieurs fichiers de concurrence. Mais je veux que le service s'exécute seulement quand l'utilisateur est inactif (ou pas plus de tâche impotarnt dans le programme).comment ajouter des tâches priorité fonctionnalité

Je sais que threadPool ne prend pas en charge la fonctionnalité "changement de priorité de thread", de sorte que la tâche prend également en charge cette fonctionnalité.

Puis-je développer cette fonctionnalité au niveau supérieur de contrôle? (Priorité TaskScheduler par exemple)

+0

mettre en œuvre une file d'attente prioritaire – zengr

+0

zengr Pourriez-vous vous préciser un commentaire? – Ivan

Répondre

4

Comme @zengr mentionné, vous pouvez utiliser un modèle de file d'attente prioritaire pour résoudre ce problème. Il y a effectivement a good sample in MSDN d'implémenter des files d'attente de priorité en utilisant ConcurrentQueue<T> instances par priorité, puis en encapsulant cela avec une implémentation personnalisée IProducerConsumerCollection<T> qui extrait les éléments de la file d'attente de priorité supérieure avant les plus bas. Ce type de mise en œuvre permet à votre producteur de déterminer le nombre de priorités, d'attribuer la priorité lors de l'ajout de l'élément et de permettre au consommateur de travailler sur les éléments les plus prioritaires sans avoir à comprendre l'algorithme de priorité.

2

Vous pouvez créer un TaskScheduler personnalisé pour la bibliothèque Parallèle des tâches, puis planifier des tâches à cet effet en transmettant une instance au constructeur TaskFactory.

est ici un exemple de la façon de le faire: Task Scheduler with priority

Questions connexes