Question

J'ai une application ASP.Net qui se déclenche au large des travailleurs de fond en utilisant ThreadPool.QueueUserWorkItem (). La plupart du temps, il y aura zéro threads d'arrière-plan en cours d'exécution, mais il est possible qu'il y ait occationally être jusqu'à 5-6 exécuter à la fois. En outre, la plupart complète dans quelques secondes, mais il est possible qu'ils puissent fonctionner aussi longtemps que 10 minutes.

Compte tenu de tous les différents scénarios qui pourraient entraîner un arrêt d'une application ASP.Net, je voudrais avoir ces processus d'arrière-plan si possible avec élégance sortie lorsque les besoins de l'application à l'arrêt et ils sont au milieu de la transformation.

Je ne prévoyons pas avoir trop d'une question de créer un moyen de signaler les processus d'arrêter leur travail tôt et nettoyer en quelques secondes d'obtenir l'appel que l'application est en cours de fermeture. Bien que si quelqu'un a des conseils précis sur ce que je serais certainement apprécier.

Mes deux questions principales sont:

1) Quel serait le bon moment pour dire aux travailleurs de fond pour envelopper les choses. Au cours Application_End? Disposer()? Ou peut-être une troisième option, je ne suis pas au courant.

2) Si j'attends lors de l'événement ci-dessus pour les processus de finition avant de revenir, est-il un point où ne pas avoir de retour Application_End pourrait immédiatement entraîner des problèmes plus graves pour l'application que de ne pas arrêter les travaux d'arrière-plan bien.

void Application_End(object sender, EventArgs e) 
{
    //if this for whatever reason takes a non-trivial time to execute, what problems could I encounter? 
    SignalBackgroundJobsAndWaitForThemToShutDown();
}

Merci!

Était-ce utile?

La solution

Le temps est approprié sur le Application_End

Une fois que vous signalez vos travaux d'arrière-plan, vous devez les attendre à ce moment-là à la fin, puis laisser continuer, comme semble que vous faites.

Vous dans le mien, ce qui est bon de placer un temps sur l'attente et ne pas attendre jamais ou bien votre piscine peut avoir des problèmes, ou l'arrêt, alors vous devez vérifier les paramètres de votre piscine sur l'attente maximum pour arrêter la piscine , il définir une valeur plus grande que votre attente, ou tout simplement désactivé.

ont également dans le mien que si vous avez le jardin de la piscine, (plus de 1 piscines de travail), le Application_End est appelé une fois pour chaque pool.

J'utilise la même technique sur mes sites, de la même façon je signaler mes fils pour arrêter la même façon, je Consigner aussi la fin dernière, et vérifier quand ils sont fin dernière, et aussi je force mes routines pour arrêter et ne pas les laisser courir pour beaucoup de temps. Le Application_End est appelé recyclage de la piscine, ou lorsque vous ouvrez le fichier app_offline.htm, ou quand vous allez fermer le service Web. Personnellement, je désactiver les recyclages, je ne les ont pas besoin et j'ouvrir seulement le app_offline.htm quand je fais des mises à jour. A ce moment j'attends mes fils de piscine pour arrêter leur travail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top