Ich verwende den folgenden Code in einer asp.net-Website.Verwenden von System.Timers.Timer in asp.net
Auf Anwendung Init rufe ich InitializeTimer() einmal auf.
Das Ziel des Codes war, DoWork() einmal pro Stunde (1 Mal pro Stunde) auszuführen.
Ich wollte auch, dass der Code zu verschiedenen Zeiten jede Schleife ausgeführt, so dass ich den zufälligen Teil hinzugefügt.
Das Ergebnis, das ich bekam, war ich, ich kann keine Erklärung finden, warum passiert.
Der Code ausgeführt, um die Funktion nach 2 Stunden, dann wieder nach 2 Stunden, dann nach 3hrs, dann nach 2 Stunden und 2 Stunden wieder. ****
Kann jemand den Grund erklären?
using System.Timers;
....
private static random = new Random();
....
public static void InitializeTimer()
{
tTimer = new Timer();
tTimer.AutoReset = true;
tTimer.Interval = TimeSpan.FromHours(1.0).TotalMilliseconds;
tTimer.Elapsed += new ElapsedEventHandler(ClassName1.tMailer_Elapsed);
tTimer.Start();
}
private static void tTimer_Elapsed(object sender, ElapsedEventArgs e)
{
tTimer.Interval += random.Next(-5, 5);
DoWork();
}
Update:
Bitte schreiben Sie keine "Verwendung Windows-Dienst" oder "geplante Aufgabe". Meine Frage ist für den folgenden Code Ich bin nicht auf der Suche nach besseren Alternativen. Auch während dieses Tests (10 Stunden), war die Website mit hohem Traffic, IIS Pool nicht neu gestartet!
auf der folgenden MSDN Basierend: (http://msdn.microsoft.com/en-us/library/system.timers.timer.interval.aspx)
Wenn das Intervall, nachdem der Zeitgeber gestartet wurde gesetzt ist, wird der Zählwert zurückgesetzt wird. Wenn Sie beispielsweise für das Intervall auf 5 Sekunden setzen und dann die Eigenschaft Enabled auf true setzen, beginnt die Zählung bei , wenn die Zeit Enabled gesetzt ist. Wenn Sie das Intervall auf 10 Sekunden zurücksetzen, wenn die Zählung 3 Sekunden beträgt, wird das Elapsed-Ereignis zum ersten Mal 13 Sekunden lang ausgelöst , nachdem Enabled auf True gesetzt wurde.
Ist es möglich, dass das Zurücksetzen des Intervalls in der verstrichenen Funktion die Ursache des Problems ist?
Das heißt, wenn die timer_Elapsed-Funktion aufgerufen wird, ist die Zählung 1hr (min ein paar Millisekunden) und mein Code "tTimer.Interval + = random.Next (-5, 5);" fügt dem Interval eine weitere volle Stunde hinzu?
Wenn Sie den zufälligen Teil herausnehmen, funktioniert der Code wie erwartet? – mpeterson
Ich weiß nicht, der Code läuft auf Production Server, ich kann es jetzt nicht ändern (ein nicht für ein paar Tage), deshalb fragte ich die Frage, um eine Erklärung zu finden. – RuSh
Also bedeutet das, dass es beim lokalen Testen wie erwartet funktioniert? – mpeterson