In asp.net forums2 oder cs system wird alle paar Minuten eine E-Mail gesendet, aber wenn sie ausgeführt wird, wird der Datenbankserver neu gestartet.
Führt dazu, dass der Thread „E-Mail senden“ abbricht.
Referenzcode:
private void ScheduledWorkCallbackEmailInterval (Objektabsender)
{
versuchen {
// Den Timer anhalten, während wir E-Mails verarbeiten
emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );
// E-Mails senden
//
Emails.SendQueuedEmails( (HttpContext) sender);
//Anonyme Benutzer aktualisieren
//
Users.UpdateAnonymousUsers( (HttpContext) sender
}
Catch(Ausnahme e) {
ForumException fe = new ForumException( ForumExceptionType.EmailUnableToSend, „Geplanter Worker-Thread fehlgeschlagen.“, e );
fe.Log();
}
Endlich {
emailTimer.Change( EmailInterval, EmailInterval );
}
}
Tatsächlich ist der Code: emailTimer.Change(System.Threading.Timeout.Infinite, EmailInterval);
theoretisch
nicht stark genug, wenn während der Ausführung ein Fehler auftritt:
emailTimer.Change( EmailInterval, EmailInterval );
}
Wenn der Datenbankserver jedoch neu gestartet wird, kann der Timer-Thread für immer sterben.
Manuelle Lösung: Starten Sie die Web-App neu
oder schreiben Sie den Code neu: emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval )
;
kann gelöst werden
Weitere Referenzen:
msdn:
System.Theading.Timer.Change API: