Ich habe ein Problem mit dem Dienst, den ich für die Ausführung automatisierter Aufgaben verwendete. Der Dienst verwendet einen Timer und wird nach 20 Sekunden ausgeführt.Zeitgesteuerte Ereignisse, die sich während der Ausführung überschneiden
Die Funktion, die ausgeführt wird, öffnet die Datenbank, liest daraus, sendet die Werte über das Netzwerk, empfängt eine Antwort und aktualisiert die Datenbank mit dieser Antwort.
Es funktioniert gut, bis ich die automatisierten Aufgaben für etwa 1000 Zeilen in der Datenbank ausführen wollte und das System 'fehlgeschlagen'. Nachdem ich meine Protokolle überprüft hatte, fand ich heraus, dass die Funktion nach dem Intervall ausgeführt wird, auch wenn eine vorherige Instanz noch ausgeführt wird. Die Funktion soll eine Nachricht senden und einige Kunden haben sich darüber beschwert, dass sie keine Nachricht erhalten, während andere bis zu sechs Mal Zeit haben.
Gibt es eine einfache und effiziente Möglichkeit, um sicherzustellen, dass die Funktion nicht ausgeführt wird, wenn eine vorherige Instanz noch ausgeführt wird.
Wenn ich starte und die Zeit, in der Funktion stoppen, wird es nur hinzufügen, die Zeit, um das Intervall „bestanden“
Hier ist der Code
public partial class Service1 : ServiceBase
{
private Timer timer1 = null;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
timer1 = new Timer();
this.timer1.Interval = 20000;
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick);
timer1.Enabled = true;
Library.WriteErrorLog("service has started");
}
private void timer1_Tick(object sender, ElapsedEventArgs e)
{
try
{
//retrieve data from database
//read rows
//Loop through rows
//send values through network
//receive response and update db
}
catch (Exception ex)
{
Library.WriteErrorLog(ex);
}
}
}
protected override void OnStop()
{
timer1.Enabled = false;
Library.WriteErrorLog("service has stopped");
}
}
Möchten Sie den Timer in Ihrem Häkchen stoppen, bevor Sie andere Dinge tun und dann wieder in einem '' 'endlich' '' suffice? Oder möchtest du den Timer laufen lassen, egal was? Dies würde sicherstellen, dass immer nur ein Timer zu einem bestimmten Zeitpunkt ausgeführt wird. –
Danke für die Antwort @Kevin Lee. – elfico