C#中,定时器,或者叫作间隔器,每隔一段时间执行一个操作。
1.Timer本身就是多线程
C#中为不同场合下使用定时器,提供了不同的Timer类,在asp.net中一般使用System.Timers.Timer。
这个类也很简单,在微软官方文档可以查看如何使用。
C#的timer,本身就封装了线程的操作,所以使用timer不用考虑再开一个线程,它已经是了。
2.Task实现定时器
我们可以使用task来完成程序中的异步操作,也可以使用task来制作一个定时器。
Task.Run(() => { while (true) { Console.WriteLine(1); Thread.Sleep(1000); } });
这代码很好理解,开启一个线程,在线程里面永远循环,每次打印1后该线程停1秒后继续判断while(true),为真后继续执行。
3.定时器的使用场合
一般使用定时器,都是想要多次执行的,而不是执行一次之后就销毁这个定时器,所以我们只考虑定时器多次执行的情况。
定时器使用的两种场合:
(1)隔段时间操作一次。比如写日志,隔个0.5秒写一次。
(2)到点执行。这和你间隔的时间有关,并且需要在定时器中进行判断,比如你08:00执行一次操作,你的时间间隔是60秒,那你可以在定时器中判断DateTime.Now>=08:00&&DateTime.Now<08:01,这样就能保证你每天只在8点到8点1分内执行操作,每天只执行一次。
要注意,没有绝对的准时,定时器的精准度是和机器有关的。
4.数据安全问题
定时器时通过多线程实现的自然有关于多线程的数据安全问题。