Dans le système asp.net forums2 ou cs, un e-mail sera envoyé toutes les quelques minutes, mais s'il est exécuté, le serveur de base de données redémarrera.
Cela entraînera la mort du fil de discussion Envoyer un e-mail.
Code de référence :
private void ScheduledWorkCallbackEmailInterval (expéditeur de l'objet)
{
essayer {
// suspend le minuteur pendant que nous traitons les e-mails
EmailInterval
);
//
Emails.SendQueuedEmails (expéditeur (HttpContext));
// Mettre à jour les utilisateurs anonymes
//
Users.UpdateAnonymousUsers
(expéditeur (HttpContext));
capture (Exception e) {
ForumException fe = new ForumException( ForumExceptionType.EmailUnableToSend, "Échec du thread de travail planifié.", e );
fe.Log();
}
enfin {
emailTimer.Change( EmailInterval, EmailInterval );
}
}
En fait, le code : emailTimer.Change(System.Threading.Timeout.Infinite, EmailInterval);
En théorie, si une erreur survient lors de l'exécution, elle sera exécutée :
finalement {.
emailTimer.Change( EmailInterval, EmailInterval );
}
Mais en fait, si le serveur de base de données est redémarré, le thread du minuteur peut mourir pour toujours.
Solution manuelle : redémarrez l'application Web
ou réécrivez le code : emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval
)
;
Autres références :
msdn :
API System.Theading.Timer.Change :