Dans un fil, j’ai créer certains `` et commencez à chaque tâche.
Quand je fais un `` pour tuer le thread, les tâches ne seront pas annulées.
Comment est-il possible de transmettre les `` de mes tâches ?
Dans un fil, j’ai créer certains `` et commencez à chaque tâche.
Quand je fais un `` pour tuer le thread, les tâches ne seront pas annulées.
Comment est-il possible de transmettre les `` de mes tâches ?
Tu peux pas. Les tâches utilisent des threads d’arrière-plan du pool de threads. Il n’est pas recommandé d’annuler également les threads à l’aide de la méthode Abort. Vous pouvez prendre un coup d’oeil au post de blog suivant qui explique une bonne façon d’annuler des tâches à l’aide de jetons d’annulation. Voici un exemple :
Comme l’indique ce message , cela peut être fait de la manière suivante :
Bien que cela fonctionne, il est déconseillé d’utiliser cette approche. Si vous pouvez contrôler le code qui s’exécute en tâche, vous irait mieux avec une gestion correcte de l’annulation.
Il est facilement possible si vous capturez le thread dans lequel la tâche s’exécute dans d’abandon d’une tâche. Voici un exemple de code pour le démontrer :
J’ai utilisé Task.Run() pour montrer le cas d’utilisation plus courant pour cela - en utilisant le confort des tâches avec l’ancien code monothread, qui n’utilise pas de la classe CancellationTokenSource pour déterminer si elle doit être annulée ou non.
Ce genre de chose est une des raisons logistiques pourquoi Abort
est obsolète. D'abord et avant tout, ne pas utiliser Thread.Abort()
pour annuler ou interrompre un thread si possible. Abort()
doit être utilisé uniquement à force de tuer un thread qui n'est pas de répondre à la plus paisible des demandes à s'arrêter dans un temps opportun.
Cela étant dit, vous devez fournir un partagées annulation de l'indicateur que l'un des ensembles de fil et attend que l'autre thread vérifie régulièrement et gracieusement sorties. .NET 4 comprend une structure spécialement conçu pour cet effet, l' CancellationToken
.
Vous ne devriez pas essayer de le faire directement. La conception de vos tâches de travail avec un CancellationToken, et d'annuler cette façon.
En outre, je voudrais vous recommandons de changer votre thread principal de fonction via un CancellationToken. Appelant Thread.Abort()
est une mauvaise idée, ce qui peut mener à divers problèmes qui sont très difficiles à diagnostiquer. Au lieu de cela, le thread peut utiliser la même Annulation de vos tâches d'utiliser - et de même CancellationTokenSource
peut être utilisé pour déclencher l'annulation de l' ensemble de vos tâches et votre thread principal.
Ce sera nettement plus simple et plus sûr, le design.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.