C# Windows Service中執行死循環輪詢


用C#編寫Windows Service時,執行輪詢一般有兩種方式,一種是用Timer,System.Timers或者是System.Thread下的,這種執行是按時間循環執行,缺點是也許上個執行還沒有完成,又開始執行新的。

另一種方式是利用線程,在OnStart里單開一個線程去跑含有死循環結構的函數,這種方式的缺點是,對線程的控制困難,停止服務了,線程還有可能在執行,不過 .Net 4.0+ 給我們提供了 CancellationTokenSource,用來取消正在運行的線程(Task),代碼:

CancellationTokenSource cancelTokenSource = new CancellationTokenSource();

        protected override void OnStart(string[] args)
        {
            Logger.Instance.WriteLine("{0} is start.", base.ServiceName);
            Task.Factory.StartNew(DoWork, cancelTokenSource.Token);
        }

        protected override void OnStop()
        {
            cancelTokenSource.Cancel();
            cancelTokenSource.Dispose();
            Logger.Instance.WriteLine("{0} is stop.", base.ServiceName);
        }

        private void DoWork(object arg)
        {
            while (!cancelTokenSource.IsCancellationRequested)  // Worker thread loop
            {
                Logger.Instance.WriteLine("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now);
                System.Threading.Thread.Sleep(2000);
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM