博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Windows Service中执行死循环轮询
阅读量:5290 次
发布时间:2019-06-14

本文共 1104 字,大约阅读时间需要 3 分钟。

用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);            }        }

 

转载于:https://www.cnblogs.com/dream1699/p/11238118.html

你可能感兴趣的文章
thinkphp 防sql注入
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
winform 实现类似于TrackBar的自定义滑动条,功能更全
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
RAP在centos上的部署
查看>>
java 8 新特性
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
VS2015 create a C++ console application based on WinRT
查看>>
c++回调函数
查看>>
神经网络初探
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
POJ 1202 Family 概率,DP,高精 难度:2
查看>>
jquery元素查找方法
查看>>
纯代码Tom
查看>>
C Looooops(poj2115+扩展欧几里德)
查看>>
Monkey测试
查看>>
二、Statement 、PreparedStatement 、CallableStatement
查看>>