Nos fóruns2 do asp.net ou no sistema cs, um e-mail será enviado a cada poucos minutos, mas se for executado, o servidor de banco de dados será reiniciado.
Fará com que o tópico Enviar e-mail morra.
Código de referência:
private void ScheduledWorkCallbackEmailInterval (remetente do objeto)
{
tentar {
// suspende o cronômetro enquanto processamos e-mails
EmailInterval
);
//
Emails.SendQueuedEmails((HttpContext) remetente);
//Atualiza usuários anônimos
//
Users.UpdateAnonymousUsers
((HttpContext) remetente);
catch(Exceção e) {
ForumException fe = new ForumException( ForumExceptionType.EmailUnableToSend, "Falha no thread de trabalho agendado.", e );
fe.Log();
}
finalmente {
emailTimer.Change(EmailInterval, EmailInterval);
}
}
Na verdade, o código: emailTimer.Change(System.Threading.Timeout.Infinite, EmailInterval)
não é forte o suficiente, em teoria, se ocorrer um erro durante a execução, ele será executado:
finalmente {.
emailTimer.Change(EmailInterval, EmailInterval);
}
Mas, na verdade, se o servidor de banco de dados for reiniciado, o thread do temporizador pode morrer para sempre.
Solução manual: reinicie o aplicativo web
ou reescreva o código: emailTimer.Change(
System.Threading.Timeout.Infinite
, EmailInterval );
Outras referências:
msdn:
API System.Theading.Timer.Change: