2014-04-25 2 views
1

Nous avons 1-2 travailleurs, qui tourne 5 threads, chaque thread lit les messages de la file d'attente Azure et effectue un traitement long, chaque traitement peut prendre environ 1-2 heures. Nous aimerions implémenter la logique pour arrêter un thread particulier à un rôle de travailleur particulier. L'utilisateur soumettra une demande pour annuler un traitement particulier. Nous sauvegardons le rôle du travailleur et les informations sur les threads dans notre tableau azur. Mais nous sommes bloqués dans l'implémentation pour arrêter le thread du rôle de travail particulier qui est en cours de traitement. quelqu'un peut-il donner une idée/conception pour arrêter un fil particulier dans un travailleur particulier. Pouvons-nous utiliser un jeton d'annulation de thread pour arrêter le thread. S'il vous plaît, aidez-nous à arrêter le fil du rôle du travailleur.Comment arrêter le rôle de travail Azure

Répondre

1

Vous aurez besoin d'un drapeau de quelque sorte. Donc, soit une nouvelle file d'attente qui est surveillée ou une mise à jour DB.

Ensuite, un nouveau thread démarré dans votre rôle de travail surveille ces messages/indicateurs d'annulation, sélectionne le bon thread et l'arrête.

Je ne recommanderais pas de faire quoi que ce soit dans le thread qui est en cours de traitement car cela ralentirait votre travail, cependant si votre thread a une méthode OnStop, vous pouvez l'utiliser pour ranger le thread avant de l'éteindre.

+0

Merci Adam. Votre approche me donne des directions. Cependant, je n'ai pas compris "si votre thread a une méthode OnStop, vous pouvez l'utiliser pour ranger le thread avant de le fermer." Vous parlez de l'annulation de thread? ... My Another question est dans le cas où nous avons 2 rôles de travail comment le thread du rôle de travailleur peut être arrêté. Votre approche fonctionne parfaitement Si c'est le même rôle de travailleur. – user145610

+0

Sur chaque rôle de travail, vous devrez démarrer les threads. Gardez une référence à ces discussions. Je l'ai fait précédemment en utilisant une liste pour les garder. En dehors de ce thread, un autre thread est en cours d'exécution pour surveiller les indicateurs dans la base de données. Une fois qu'il détecte un drapeau pour arrêter le thread, vous pouvez appeler un Thread.Abort(); –

+0

Merci Adam. Laisse-moi essayer – user145610

Questions connexes