Thread Sleep en ASP classique?
Je suis en train de faire une révision sur une ancienne application qui est écrit dans le classique ASP/VbScript.
Il a une fonction pour envoyer un e-mail aux membres de l'application, mais parce que la liste des membres est assez grand, le serveur rejette les nouveaux e-mails après la première centaine sont envoyés.
J'ai écrit un code pour le faire envoyer d'e-mails en rafale de 20, mais cela ne fonctionne toujours pas. Je pense que peut-être rendre le sommeil pour une seconde entre le rafale pourrait fonctionner correctement.
Cependant, je n'arrive pas à trouver un Fil.Dormir type de méthode dans VbScript.
Est-il un?
source d'informationauteur FlySwat
Vous devez vous connecter pour publier un commentaire.
Pas à ma connaissance. Vous devrez utiliser un peu de code externe écrite dans la classe VB ou que ce soit à faire.
Ou occupé-attendre (gak).
Cette routine attend tout le temps, et ne pas utiliser CPU:
il ya aussi une bonne hta hack qui devrait fonctionner. Cherchez le Synthétique en Fonction de Veille ici:
http://www.mvps.org/scripting/rube/index.htm
Désolé que cette réponse n'est pas strictement lié à la question, mais en essayant de répondre à une question, il a juste obtenu sorte de gros pour les commentaires.
@shahka, la différence est, lorsque vous essayez de vous connecter à une base de données, le code entre dans un "état d'attente", (comme un rappel), donc pas de temps CPU est utilisé. Il n'est pas important à propos de ce que la SESSION ou le THREAD est en train de faire, il importe que le CPU/Core est en train de faire.
Pour un exemple, trouver un plus non-CPU multi-core. Installation de votre échantillon à dormir pendant 10 secondes, puis exécutez pour 2 à 5 secondes, puis dormir à nouveau pour 10. Faire environ 20 000 fois. En cours d'exécution, essayez de l'utiliser, voir juste comment il est réactif. Déplacer des fenêtres, montre que l'utilisation CPU, etc.
QUI vous donne un exemple de ce qui se passe à cet homme du serveur Web. Il ne répond pas, parce que le fil planificateur aura tendance à "favoriser" le CPU/Core qui n'est PAS "filé" (comme nous l'appelons). Ainsi, TOUTES les requêtes web, OS, etc qui va se passer sur l'AUTRE coeur, donc plus de chargement, en lui donnant un sentiment d'être "lancé" aussi bien.
Maintenant, vous avez des moments où vous pouvez serré en boucle un CPU, et il ne sera pas question. Mais, dans toutes mes années de programmation, je n'ai jamais trouvé qu'il est nécessaire d'écrire une boucle serrée comme ça (sur le but). Certains de il est de retour autour de à faire les choses de la bonne façon et une mauvaise façon. Faire quelque chose de mal la façon dont fonctionnera le plus souvent, mais cela ne signifie pas qu'il wworks CORRECTEMENT.
Si vous voulez un bon exemple de cela, aller chercher juste au sujet de tout virus sur la planète, et de les analyser. Vous verrez que il pour faire des dégâts, ils (les auteurs de virus ont souvent à faire les choses de la "mauvaise" façon. Bien sûr, il fait le travail, mais il rompt également le virus sur le dire, une autre version linguistique de Windows, ou il se bloque sur l'ensemble de la machine en niant son but, etc.
Greg Hewgill a été l'un de mes premiers professeurs à propos de ce type de choses, et depuis que j'ai travaillé avec lui pendant de nombreuses années, et pris en charge, et, plus tard, QA ed son logiciel, j'ai beaucoup appris de lui, dans le même waay je suis en train de vous dire pourquoi votre exemple de code n'est pas bon. strictement parlant, le code est très bien. Elle fonctionne. Il est bien écrit. Mais, il ne fonctionne pas correctement, et a des effets secondaires indésirables que les autres, maaybe amature programmeurs qui peut être la lecture de cette recherche de la connaissance ne comprennent pas entièrement. C'EST pourquoi je n'ai pas de recommander votre échantillon.
Vous savez, c'est un de ces moments que je pense que la configuration d'un privé file d'attente MSMQ pourrait être une Bonne Chose. Mettre les e-mails que vous souhaitez envoyer dans la file d'attente, et ont un nouveau .NET service de faire l'envoi. Qui permettra de libérer votre ASP.NET application, et vous permettre de gérer votre sendin' de manière centralisée!
Cela ressemble à un bon hack:
http://www.ehow.com/how_2001270_sleep-asp-using-ado.html
L'astuce consiste à créer un objet ADO connection et puis essayez de vous connecter à un non-existant serveur. Cela va bloquer pour la durée de la connexion de l'objet en paramètre de délai d'attente.
Être conscient que IIS par défaut ASP délai d'exécution des scripts-out par défaut de 90 secondes, de sorte que l'exécution des grands scripts qui envoient des volumes de courrier électronique de cette façon le temps sauf si vous modifiez l'asp délai d'attente.
Êtes-vous à l'aide de CDO? Puisque c'est ainsi balisé ASP classique je suppose.
Si oui, vous pouvez utiliser
myMail.La Configuration.Champs.Élément("http://schemas.microsoft.com/cdo/configuration/sendusing")=1 '(qui est de l'envoyer à l'aide de ramassage)
au lieu de
myMail.La Configuration.Champs.Élément("http://schemas.microsoft.com/cdo/configuration/sendusing")=2 '(qui est de l'envoyer en utilisant le port)
C'est plus fiable parce qu'il écrit l'email de fichier (généralement C:\inetpub\mailroot\pickup) et IIS du serveur SMTP vérifie le dossier pour le nouveau courrier et réessayer si elle échoue la première fois. Le hic, c'est que vous avez à mettre en place SMTP dans le composant logiciel enfichable IIS.
Vous pouvez utiliser :
La réponse est de ne pas utiliser le serveur d'attendre, utilisez le client.
Vous pouvez écrire un script javascript qui continue d'appeler, Envoyer() chaque seconde à l'aide setInterval jusqu'à ce que la file d'attente est vide.Utiliser un Ajax appel à envoyer un courriel à l'aide d'un serveur de script côté. Puis sur le retour de l'appel ajax, vous pouvez aussi indiquer dans la page html qu'un courriel a été envoyé.