Je souhaite implémenter un délai d'attente sur l'exécution de tâches dans un projet utilisant le CCR. Fondamentalement, lorsque je poste un élément sur un port ou mettez en file d'attente une tâche vers une DispatcherQueue, je veux être en mesure d'annuler la tâche ou le thread sur lequel elle s'exécute si cela prend plus de temps que prévu. Comment puis-je faire ceci?Comment abandonner les threads/tâches CCR?
Répondre
Pouvez-vous confirmer ce que vous demandez? Exécutez-vous une tâche de longue durée dans Dispatcher? Tuer le thread casserait le modèle CCR, donc vous devez être en mesure de signaler au thread pour terminer son travail et son rendement. En supposant qu'il est une boucle qui ne soit pas assez rapide de terminer, vous pouvez choisir de enqueue une minuterie:
var resultTimeoutPort = new Port<DateTime>();
dispatcherQueue.EnqueueTimer(TimeSpan.FromSeconds(RESULT_TIMEOUT),
resultTimeoutPort);
et d'assurer le fil de blocage est disponible une référence à resultTimeoutPort. Dans la boucle de blocage, l'une des conditions de sortie pourraient être:
do
{
//foomungus amount of work
}while(resultTimeoutPort.Test()==null&&
someOtherCondition)
S'il vous plaît publier plus d'informations si je suis aboyer le mauvais arbre.
Vous vous dirigez dans la bonne direction, sauf que j'essayais d'éviter d'avoir à modifier le code de travail foomungus. Aussi ce code ne peut pas toujours avoir une boucle parfois je veux juste qu'il essaie de terminer dans le temps t et s'en aller s'il ne peut pas. J'ai fait quelques lectures et il semble qu'il n'y ait pas de moyen d'obtenir le comportement exact que je veux parce que je casserais le modèle comme vous l'avez dit. – SpaceghostAli
En effet, sans tuer un fil, je pense que vous êtes coincé avec la signalisation à la caution rapidement. Qu'essayez-vous d'accomplir? Peut-être y a-t-il une façon différente de s'attaquer au problème? – spender
Vous pouvez enregistrer le thread (Thread.CurrentThread) au début de votre gestionnaire "Receive" CCR (ou dans une méthode qui appelle votre méthode via un délégué). Ensuite, vous pouvez effectuer votre vérification périodique et annuler si nécessaire, de la même manière que vous l'auriez fait si vous avez créé le fil manuellement. Le problème est que si vous utilisez votre propre Microsoft.Ccr.Core.Dispatcher avec un nombre fixe de threads, je ne pense pas qu'il existe un moyen de récupérer ces threads une fois que vous les avorter (en fonction de mes tests). Donc, si votre répartiteur a 5 threads, vous ne pourrez annuler que 5 fois avant de poster ne fonctionnera plus quelles que soient les tâches enregistrées. Cependant, si vous construisez un DispatcherQueue en utilisant le pool de threads CLR, tous les threads CCR que vous annulez seront automatiquement remplacés et vous n'aurez plus ce problème. D'après ce que j'ai vu, bien que le répartiteur CCR soit recommandé, je pense que l'utilisation du pool de threads CLR est la meilleure façon de procéder dans cette situation.
- 1. CCR, Yield et VB.net
- 2. SQLCommand asynchrone et CCR
- 3. quand abandonner l'enregistrement actif?
- 4. Comment abandonner l'exécution d'un script Python?
- 5. Utilisation du CCR avec Asynchronous service WCF
- 6. Bibliothèque parallèle CCR vs Task de Microsoft
- 7. Question sur le CCR et l'intégration WCF
- 8. Comment abandonner une recherche de longue durée dans System.DirectoryServices.Protocols
- 9. Comment faire pour abandonner un socket en C#
- 10. Comment puis-je enregistrer une vidéo en direct avec gstreamer sans abandonner les images?
- 11. jQuery: Abandonner automatiquement les requêtes Ajax lors du déchargement de page?
- 12. Qu'est-ce qui peut faire que TCP/IP abandonne les paquets sans abandonner la connexion?
- 13. comment puis-je passer un paramètre à EnqueueTimer dans le .net ccr
- 14. Comment puis-je abandonner une installation InstallShield en fonction d'un résultat d'action personnalisée de vbscript?
- 15. Comment abandonner un téléchargement Catalyst basé sur Content-Length ou MIME-Type?
- 16. Comment pouvez-vous abandonner un thread et faire exécuter du code dans ce thread?
- 17. Pourquoi l'utilisation de Causalités dans CCR entraîne-t-elle des fuites de mémoire?
- 18. abandonner la session dans asp.net sur le navigateur fermer..aider cookie de session
- 19. Pourquoi C# dit-il que la IterativeTask du CCR est non générique?
- 20. Comment un serveur HTTP (utilisant des sockets) devrait-il détecter que le client n'est plus connecté et abandonner le traitement?
- 21. Abandonner un appel de service Web asynchrone et rediriger vers une autre URL (ASP.NET Ajax)
- 22. Comment vérifier les fuites de mémoire dans les modules d'extension Guile?
- 23. Comment activer les couleurs de plus de 8 bits dans Terminal.app?
- 24. Comment surveiller les tables dans SQL Server pour les modifications
- 25. Comment puis-je obtenir le mode conception pour les contrôles utilisateur basés sur des modèles?
- 26. DB2 - Modifie les données SQL
- 27. Spring.net Supprimer toutes les connexions adotemplate?
- 28. Comment gérez-vous les téléchargements temporaires d'images en PHP?
- 29. Comment les applications collectent-elles les statistiques?
- 30. Comment supprimer les validations?
Cool. Question de robotique. – Will