asp.net forums2나 cs 시스템에서는 몇 분 간격으로 이메일이 발송되는데, 실행하면 데이터베이스 서버가 재시작됩니다.
이메일 보내기 스레드가 종료됩니다.
참조 코드:
private void ScheduledWorkCallbackEmailInterval(객체 발신자)
{
노력하다 {
// 이메일을 처리하는 동안 타이머를 일시 중지합니다.
emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );
// 이메일 보내기
//
Emails.SendQueuedEmails((HttpContext) 발신자);
//익명 사용자 업데이트
//
Users.UpdateAnonymousUsers((HttpContext) 발신자)
}
catch(예외 e) {
ForumException fe = new ForumException( ForumExceptionType.EmailUnableToSend, "예약된 작업자 스레드가 실패했습니다.", e );
fe.Log();
}
마지막으로 {
emailTimer.Change( EmailInterval, EmailInterval );
}
}
실제로 emailTimer.Change(System.Threading.Timeout.Infinite, EmailInterval); 코드는
이론적으로 실행 중에 오류가
발생하면 실행될 만큼 강력하지 않습니다.
emailTimer.Change( EmailInterval, EmailInterval );
}
그러나 실제로 데이터베이스 서버가 다시 시작되면 타이머 스레드가 영원히 종료될 수 있습니다.
해결
방법: 웹 앱을 다시 시작
하거나 코드를 다시 작성하세요. emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );
emailTimer.Change( EmailInterval * 2, EmailInterval );
기타 참조:
msdn:
System.Theading.Timer.Change API: