Panduan Pemilihan Kawalan Pemasa Perkhidmatan Windows
Apabila membina perkhidmatan Windows yang melaksanakan tugas secara berkala, memilih kawalan pemasa yang betul adalah penting. Kedua-dua System.Timers.Timer
dan System.Threading.Timer
boleh digunakan untuk tujuan ini, tetapi ketahui kesannya masing-masing.
System.Timers.Timer: pilihan kegigihan yang boleh dipercayai
System.Timers.Timer
Menyediakan kebolehpercayaan dan ketahanan dalam perkhidmatan Windows. Ia memanfaatkan mekanisme pemasaan sistem pengendalian untuk memastikan pemasa kekal aktif walaupun boleh laku perkhidmatan dipunggah daripada memori. Walau bagaimanapun, terdapat cadangan bahawa pemasa ini mungkin menghadapi masalah dalam senario perkhidmatan Windows tertentu.
System.Threading.Timer: Alternatif fleksibel
System.Threading.Timer
Menyediakan pilihan yang lebih fleksibel untuk perkhidmatan Windows. Ia dianggap sebagai pemasa ringan, dilaksanakan sepenuhnya dalam kod terurus. Seperti System.Timers.Timer
, ia menyokong tetapan semula automatik dan boleh digunakan untuk melaksanakan fungsi panggil balik secara berkala. Tidak seperti System.Timers.Timer
, ia tidak terjejas oleh penyahpasangan boleh laku perkhidmatan.
Pemilihan pemasa
Akhirnya, pilihan antara System.Timers.Timer
dan System.Threading.Timer
bergantung pada keperluan dan keutamaan tertentu. Sila pertimbangkan faktor berikut:
System.Timers.Timer
Lebih mudah digunakan, dengan sintaks yang lebih ringkas dan model dipacu peristiwa. System.Timers.Timer
Manfaatkan mekanisme pemasaan sistem pengendalian untuk memberikan kebolehpercayaan yang lebih tinggi dalam situasi tertentu. System.Threading.Timer
Memberikan lebih kawalan ke atas tingkah laku pemasa, termasuk keupayaan untuk melaraskan selang secara dinamik. Contoh Penggunaan
Berikut ialah contoh cara menggunakan dua pemasa ini dalam perkhidmatan Windows:
Sistem.Pemasa.Pemasa
<code class="language-csharp">using System; using System.Timers; using System.ServiceProcess; namespace ServiceUsingSystemTimers { public class MyService : ServiceBase { private Timer timer; public MyService() { timer = new Timer(1000); // 设置 1 秒的间隔 timer.Elapsed += OnTimerElapsed; } protected override void OnStart(string[] args) { base.OnStart(args); timer.Start(); } protected override void OnStop() { base.OnStop(); timer.Stop(); } private void OnTimerElapsed(object sender, ElapsedEventArgs e) { // 执行您的周期性任务 } } }</code>
System.Threading.Timer
<code class="language-csharp">using System; using System.Threading; using System.ServiceProcess; namespace ServiceUsingSystemThreadingTimer { public class MyService : ServiceBase { private Timer timer; public MyService() { timer = new Timer(OnTimerCallback, null, 1000, 1000); // 设置 1 秒的间隔 } protected override void OnStart(string[] args) { base.OnStart(args); //启动定时器 } protected override void OnStop() { base.OnStop(); timer.Dispose(); // 释放定时器资源 } private void OnTimerCallback(object state) { // 执行您的周期性任务 } } }</code>
Kesimpulan
Kedua-duaSystem.Timers.Timer
dan System.Threading.Timer
boleh digunakan dengan berkesan untuk mencipta perkhidmatan Windows yang melaksanakan tugas secara tetap. Mana satu pilihan bergantung pada keperluan dan pilihan khusus pembangun. Perlu diingat bahawa kaedah System.Threading.Timer
Change
perlu ditetapkan mengikut keperluan sebenar dalam OnStart
, dan bahagian kod ini ditinggalkan dalam contoh.
Atas ialah kandungan terperinci System.Timers.Timer vs. System.Threading.Timer: Kawalan Pemasa Mana Yang Terbaik untuk Perkhidmatan Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!