6
votes

Les threads peuvent-ils démarrer par tâches parallèle bibliothèque de tâches comme fils de premier plan?

La documentation MSDN indique que les threads démarrés par la TPL apprécieront une meilleure planification. Cependant, étant donné que les threads sont basés sur le threadpool, ils seront mis en œuvre comme threads d'arrière-plan.

Maintenant, il y a quelques tâches que je voudrais être effectuées en parallèle, mais il est impératif que ces tâches soient effectuées jusqu'à l'achèvement.

Alors, comment créer de telles tâches qui sont essentiellement des fils de premier plan, mais apprécient toujours la planification améliorée fournie par la TPL?


1 commentaires

Pouvez-vous décrire le scénario un peu plus? Sont-ils des emplois totalement indépendants d'incendie et d'oublier?


4 Réponses :


7
votes

Vous pouvez écrire votre propre TaskSchDuler Mise en œuvre. Regardez dans le TaskschDuler Documentation pour un exemple de mise en œuvre d'un TaskschDuler - Espérons que c'est relativement simple de là.


3 commentaires

Ce lien est maintenant cassé. Je pense que c'est équivalent: code.msdn.microsoft.com/parextsamples


@Holf: merci, corrigé.


@Theodorzoulias: changé vers le TaskschDuler Docs, qui incluent un exemple.



5
votes

Le TPL ne vous donne pas vraiment de threads, il vous permet de créer des tâches. Les tâches peuvent être exécutées sur différents threads, alors tâche! = Thread.

Comme avec la plaine threadpool, ce ne serait pas une bonne idée de changer de propriétés de fil.

Mais votre problème pourrait être facilement résolu en attendant toutes les tâches remarquables du fil principal. Vous voulez généralement attraper et gérer leurs exceptions aussi.


1 commentaires

Merci! Maintenant, je crée juste un fil non-fond trivial qui attend que les tâches meurent toutes. Accepter votre réponse.



0
votes

the isbackground propriété peut être attribué à. Je ne suis pas sûr que ce soit "d'accord" ou "non-pantalon-sur-tête" cependant.

codage heureux.


0 commentaires

0
votes

Il est impératif que ces tâches soient réalisé jusqu'à l'achèvement.

Je suppose que vous voulez dire que vous voulez vous assurer que ces tâches complètent même si le fil principal est arrêté?

Je ne suggérerais pas en fonction du fil de premier plan séjournant actif si le fil principal s'éteint. Dans des circonstances normales, vous pouvez garder le fil principal actif, attendre que les tâches se terminent. Vous pouvez également écrire un gestionnaire pouvant piéger des exceptions non gérées et faire une fermeture gracieuse - y compris l'attente des tâches à compléter. Si quelque chose échappe à votre piège à exceptions non conventionnels, votre processus est probablement tellement corrompu que vous ne devez pas faire confiance aux résultats des tâches.

Et, bien sûr, rien que vous n'empêchera qu'un utilisateur de fermer les threads à l'aide de la tâche ou quelque chose de similaire.


0 commentaires