В системе asp.net forums2 или cs электронное письмо будет отправляться каждые несколько минут, но если оно будет выполнено, сервер базы данных перезапустится.
Приведет к прекращению потока отправки электронной почты.
Справочный код:
частный void ScheduledWorkCallbackEmailInterval (отправитель объекта)
{
пытаться {
// приостанавливаем таймер, пока мы обрабатываем электронные письма
// Отправляем электронные письма
);
//
Emails.SendQueuedEmails((HttpContext) отправитель);
//Обновляем анонимных пользователей
//
Users.UpdateAnonymousUsers((HttpContext) отправитель)
;
catch(Исключение е) {
ForumException fe = new ForumException( ForumExceptionType.EmailUnableToSend, «Ошибка запланированного рабочего потока.», e );
фе.Журнал();
}
окончательно {
emailTimer.Change( EmailInterval, EmailInterval );
}
}
На самом деле код: emailTimer.Change(System.Threading.Timeout.Infinite, EmailInterval)
Теоретически, если во время выполнения произойдет ошибка, он будет выполнен:
finally {);
emailTimer.Change( EmailInterval, EmailInterval );
}
Но на самом деле, если сервер базы данных будет перезапущен, поток таймера может умереть навсегда.
Решение вручную: перезапустите веб-приложение
или перепишите код: emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval);
на: emailTimer.Change( EmailInterval * 2, EmailIntervalможно решить
);
Другие ссылки:
msdn:
System.Theading.Timer.Change API: