Die beste Timer-Wahl unter Windows-Diensten
In Windows-Diensten ist es eine häufige Anforderung, bestimmte Aufgaben regelmäßig auszuführen. Zu diesem Zweck stehen zwei Haupt-Timer-Klassen zur Verfügung: System.Timers.Timer
und System.Threading.Timer
. Welchen Timer Sie wählen, ist entscheidend und erfordert eine sorgfältige Abwägung der Vor- und Nachteile.
Unnötige Laufzeitabhängigkeiten vermeiden
Bei der Verwendung von Timern in Windows-Diensten muss darauf geachtet werden, die Verwendung von System.Web.UI.Timer
oder System.Windows.Forms.Timer
zu vermeiden. Diese Timer wurden speziell für ASP.NET-Anwendungen und Windows Forms entwickelt. Ihre Integration in einen Dienst erfordert die Einbeziehung zusätzlicher Assemblys, die möglicherweise nicht mit der Laufzeitumgebung des Dienstes kompatibel sind.
Vergleich der Anwendbarkeit von System.Timers.Timer und System.Threading.Timer
System.Timers.Timer
und System.Threading.Timer
sind beide mögliche Lösungen für die Verwendung von Timern in Windows-Diensten. Allerdings gibt es bestimmte Faktoren, die bei der Auswahl berücksichtigt werden sollten.
System.Timers.Timer
Um System.Timers.Timer
effektiv nutzen zu können, muss der Timer auf Klassenebene deklariert werden, um sicherzustellen, dass er während seiner gesamten Lebensdauer gültig bleibt. Diese Maßnahme verhindert, dass die Garbage Collection ihren Betrieb vorzeitig beendet.
System.Threading.Timer
System.Threading.Timer
hat einen komplexeren Mechanismus. Es erfordert die Angabe eines Delegaten, der das gewünschte Timer-Verhalten kapselt. Darüber hinaus kann ein geeigneter Synchronisierungsmechanismus (z. B. AutoResetEvent
) erforderlich sein, um die Interaktion mit dem Betriebssystem zu koordinieren.
Codebeispiel
Das folgende C#-Codebeispiel veranschaulicht die Bereitstellung von System.Timers.Timer
und System.Threading.Timer
in einem Windows-Dienst:
System.Timers.Timer-Beispiel
using System; using System.Timers; public class ServiceWithTimer { private static System.Timers.Timer _timer; public static void Main() { _timer = new System.Timers.Timer(10000); // 类级别声明定时器 _timer.Elapsed += OnTimedEvent; _timer.Interval = 2000; _timer.Enabled = true; Console.WriteLine("按任意键停止服务..."); Console.ReadKey(); } private static void OnTimedEvent(object sender, ElapsedEventArgs e) { Console.WriteLine("定时器事件在 {0} 触发", e.SignalTime); } }
System.Threading.Timer-Beispiel
using System; using System.Threading; public class ServiceWithTimer { public static void Main() { AutoResetEvent autoResetEvent = new AutoResetEvent(false); TimerCallback timerCallback = CheckStatus; Console.WriteLine("创建定时器..."); Timer stateTimer = new Timer(timerCallback, autoResetEvent, 1000, 250); Console.WriteLine("\n更改周期..."); stateTimer.Change(0, 500); Thread.Sleep(5000); stateTimer.Dispose(); Console.WriteLine("\n销毁定时器。"); } private static void CheckStatus(object stateInfo) { AutoResetEvent autoResetEvent = (AutoResetEvent)stateInfo; Console.WriteLine("检查状态..."); autoResetEvent.Set(); } }
Fazit
System.Timers.Timer
und System.Threading.Timer
bieten beide praktikable Lösungen für die Implementierung geplanter Aufgaben in Windows-Diensten. Die Wahl zwischen beiden hängt von den spezifischen Anforderungen des Dienstes und dem Grad der Kontrolle über das Timerverhalten ab.
Das obige ist der detaillierte Inhalt vonSystem.Timers.Timer vs. System.Threading.Timer in Windows-Diensten: Welchen Timer soll ich wählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!