thread.sleep dans asp.net
Je suis la simulation de la comète en direct protocole pour mon site, donc dans mon contrôleur, je suis en ajoutant
while(nothing_new && before_timeout){
Thread.Sleep(1000);
}
mais j'ai remarqué que le site est devenu lent après j'ai ajouté cette fonctionnalité. Après le débogage, j'ai conclu que lorsque j'appelle Thread.Sleep
tous les fils, même dans d'autres demandes, sont bloqués.
Pourquoi ne Thread.Sleep
bloquer tous les fils, et non seulement le courant, et la façon de traiter un problème de ce genre?
source d'informationauteur Hilmi
Vous devez vous connecter pour publier un commentaire.
Ce que @Servy dit est correct. En plus de sa réponse que je voudrais jeter mes 2 cents. Je parie que vous êtes en utilisant ASP.NET des Sessions et vous envoyez parallèlement des demandes de la même session (par exemple, vous envoyez plusieurs requêtes AJAX). Sauf que le ASP.NET la Session n'est pas thread-safe et vous ne pouvez pas avoir des requêtes parallèles à partir de la même session. ASP.NET aurez simplement à sérialiser les appels et de les exécuter de manière séquentielle.
C'est pourquoi, vous l'observez blocage. Il permet de bloquer les demandes uniquement à partir de la même ASP.NET Session. Si vous envoyer des requêtes HTTP à partir d'une autre session, il ne bloquera pas. Ce comportement est voulu par la conception et vous pouvez en lire plus à ce sujet
ici
.ASP.NET les Sessions sont comme un cancer et je vous recommande de le désactiver dès que vous découvrez qu'ils sont utilisés dans une application web:
Pas plus de files d'attente. Maintenant vous avez une solution évolutive de l'application.
Cette conclusion est erronée.
Thread.Sleep
ne pas bloquer n'importe quel autre thread, il ne fait que bloquer le thread courant. Si plusieurs threads sont bloqués par cette ligne de code, puis c'est parce que tous ces threads sont frapper cette ligne de code.