Bonjour,
j'ai réalisé un site web en asp.net (C# 2.0) qui doit effectuer à un moment une pause. Ce site web est dupliqué en très grand nombre sur IIS6. Quand je dis en très grand nombre c'est dans les 900 environ (me demandez pas pourquoi, ca n'a aucun intéret ici). J'ai mis des pool d'applications (il y a environ 150 sites pour un pool) ce qui fait que j'ai quelques process w3p.exe qui tournent. Jusque la, meme si le déploiement est un peu exotique, tout va bien.
Pour la pause, j'utilise ce bout de code qui fonctionne mais qui est inélégant au possible (car il utilise du windows form pour pomper les messages) :
(DELAY est une constante en milliseconds)
Le probleme avec Thread.Sleep c'est qu'il bloque le thread en cours, donc les 150 sites d'un meme pool d'application. Le DoEvents() me permets (mais veurk que c'est laid) d'éviter ce blocage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int v_maxDelay = 60 * 1000; int v_span = 100; int v_currentDelay = 0; while (v_currentDelay < DELAY && v_currentDelay < v_maxDelay) { System.Windows.Forms.Application.DoEvents(); Thread.Sleep(v_span); v_currentDelay += v_span; }
J'ai pensé à utiliser à la place un objet qui timeout (et le faire timeouter expres par exemple) mais je ne trouve pas d'objets qui irait bien.
Les timers j'ai essayé, ca ne va pas, ce n'est pas bloquant. C'est la qu'est tout le paradoxe, je dois bloquer le site mais pas ses petits camaradess qui sont dans le meme pool.
Si quelqu'un a une idée, je suis preneur
edit : non, faire 1 pool par site n'est pas possible, ca me ferait 900 pool donc 900 process w3p ^^
Partager