2010-10-06 6 views
1

Si je navigue vers une page Web asp.net contenant les éléments suivants lors du chargement de la page, combien de temps le thread continuera-t-il à courir après la fermeture du navigateur? Je suppose que cela finirait tout seul, mais je ne suis pas sûr que cela se terminera à la fin de la session, ou quelque chose comme ça.Thread Running in Web Page

protected void Page_Load(object sender, EventArgs e) { 
    Thread T = new Thread(new ThreadStart(longRunningMethod)); 
    T.Start(); 
} 

Merci.

Répondre

3

Le thread s'arrêtera lorsque le code dans le thread s'arrêtera, c'est-à-dire chaque fois que longRunningMethod() se terminera. C'est pourquoi il peut être dangereux de commencer à lancer des threads au sein d'un serveur d'application, au moins sans gérer leur cycle de vie (c'est-à-dire fournir la logique pour que le thread soit arrêté après un certain temps, fournir une limite supérieure sur le nombre de «threads de travail» pouvant fonctionner en même temps, etc.).

Si chaque visite d'une page Web particulière entraînait le lancement d'un thread distinct sur le serveur, le thread pouvant éventuellement tourner à l'infini, une partie suffisante de ces visites mettrait le serveur de l'application à genoux.

+0

Bien sûr. C'était un exemple trop simplifié pour faire passer un concept. Merci pour votre réponse. –

2

Il est acceptable d'utiliser pour des tâches plus courtes. Je dispose d'un système de génération de rapports qui permet à un utilisateur d'obtenir rapidement la première partie du rapport. Les statistiques peuvent être générées séparément pour être prêtes au moment où le client les reçoit. Pour les processus plus longs (dans mon cas plus de 30 ans), vous voudrez tirer parti d'un service quelconque et ajouter votre tâche à une file d'attente.

Vous devez également tenir compte du fait que si le pool d'applications se recycle, il mettra fin à vos threads, ce qui constitue une incitation supplémentaire à déplacer ces threads ailleurs.

Enfin, vous voudrez avoir un moyen d'indiquer que votre processus est terminé. Considérez comment vous saurez quand le thread se termine de sorte que si vous réessayez la demande, vous ne générez pas le même ensemble de données qui pourrait déjà être en cours de traitement.