Pilihan pemasa terbaik dalam perkhidmatan Windows
Dalam perkhidmatan Windows, adalah keperluan biasa untuk melaksanakan tugas tertentu secara tetap. Terdapat dua kelas pemasa utama yang tersedia untuk tujuan ini: System.Timers.Timer
dan System.Threading.Timer
. Pemasa yang anda pilih adalah kritikal dan memerlukan penimbangan yang teliti terhadap kebaikan dan keburukan.
Elakkan kebergantungan masa jalan yang tidak perlu
Apabila menggunakan pemasa dalam perkhidmatan Windows, penjagaan mesti diambil untuk mengelakkan penggunaan System.Web.UI.Timer
atau System.Windows.Forms.Timer
. Pemasa ini direka khusus untuk aplikasi ASP.NET dan Borang Windows. Mengintegrasikannya ke dalam perkhidmatan memerlukan kemasukan pemasangan tambahan yang mungkin tidak serasi dengan persekitaran masa jalan perkhidmatan.
Perbandingan kebolehgunaan Sistem.Pemasa.Pemasa dan Sistem.Pemasa.Pemasa
System.Timers.Timer
dan System.Threading.Timer
kedua-duanya penyelesaian yang mungkin untuk menggunakan pemasa dalam perkhidmatan Windows. Walau bagaimanapun, terdapat faktor khusus yang perlu dipertimbangkan semasa memilih.
Sistem.Pemasa.Pemasa
Untuk menggunakan System.Timers.Timer
dengan berkesan, pemasa mesti diisytiharkan di peringkat kelas untuk memastikan ia kekal dalam skop sepanjang hayatnya. Langkah ini menghalang kutipan sampah daripada menamatkan operasinya lebih awal.
System.Threading.Timer
System.Threading.Timer
mempunyai mekanisme yang lebih kompleks. Ia memerlukan penetapan perwakilan yang merangkum tingkah laku pemasa yang diingini. Selain itu, mekanisme penyegerakan yang sesuai (cth. AutoResetEvent
) mungkin diperlukan untuk menyelaraskan interaksi dengan sistem pengendalian.
Contoh Kod
Contoh kod C# berikut menunjukkan penggunaan System.Timers.Timer
dan System.Threading.Timer
dalam perkhidmatan Windows:
Contoh Sistem.Pemasa.Pemasa
<code class="language-csharp">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); } }</code>
Contoh Sistem.Benang.Pemasa
<code class="language-csharp">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(); } }</code>
Kesimpulan
System.Timers.Timer
dan System.Threading.Timer
kedua-duanya menyediakan penyelesaian yang berdaya maju untuk melaksanakan tugas berjadual dalam perkhidmatan Windows. Pilihan antara kedua-duanya bergantung pada keperluan khusus perkhidmatan dan tahap kawalan ke atas tingkah laku pemasa.
Atas ialah kandungan terperinci System.Timers.Timer vs. System.Threading.Timer dalam Perkhidmatan Windows: Pemasa Mana Yang Harus Saya Pilih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!