C#中,定时器,或者叫作间隔器,每隔一段时间执行一个操作。

1.Timer本身就是多线程

C#中为不同场合下使用定时器,提供了不同的Timer类,在asp.net中一般使用System.Timers.Timer。

这个类也很简单,在微软官方文档可以查看如何使用。
C#的timer,本身就封装了线程的操作,所以使用timer不用考虑再开一个线程,它已经是了。

2.Task实现定时器

我们可以使用task来完成程序中的异步操作,也可以使用task来制作一个定时器。

            Task.Run(() =>
{
while (true)
{
Console.WriteLine();
Thread.Sleep();
}
});

这代码很好理解,开启一个线程,在线程里面永远循环,每次打印1后该线程停1秒后继续判断while(true),为真后继续执行。

3.定时器的使用场合

一般使用定时器,都是想要多次执行的,而不是执行一次之后就销毁这个定时器,所以我们只考虑定时器多次执行的情况。

定时器使用的两种场合:
(1)隔段时间操作一次。比如写日志,隔个0.5秒写一次。
(2)到点执行。这和你间隔的时间有关,并且需要在定时器中进行判断,比如你08:00执行一次操作,你的时间间隔是60秒,那你可以在定时器中判断DateTime.Now>=08:00&&DateTime.Now<08:01,这样就能保证你每天只在8点到8点1分内执行操作,每天只执行一次。

要注意,没有绝对的准时,定时器的精准度是和机器有关的。

4.数据安全问题

定时器时通过多线程实现的自然有关于多线程的数据安全问题。

C# task和timer实现定时操作的更多相关文章

  1. java Timer(定时调用、实现固定时间执行)

    最近需要用到定时调用的功能.可以通过java的Timer类来进行定时调用,下面是有关Timer的一些相关知识. 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个 ...

  2. 订餐系统之定时器Timer不定时

    经过几天漫长的问题分析.处理.测试.验证,定时器Timer终于定时了,于是开始了这篇文章,希望对还在纠结于“定时器Timer不定时”的同学有所帮助,现在的方案,在系统日志中会有警告,如果您有更好的方案 ...

  3. C# 创建Windows服务。服务功能:定时操作数据库 (转)

    C# 创建Windows服务.服务功能:定时操作数据库 一.创建window服务 1.新建项目-->选择Windows服务.默认生成文件包括Program.cs,Service1.cs 2.在S ...

  4. 定时器Timer不定时

    订餐系统之定时器Timer不定时 经过几天漫长的问题分析.处理.测试.验证,定时器Timer终于定时了,于是开始了这篇文章,希望对还在纠结于“定时器Timer不定时”的同学有所帮助,现在的方案,在系统 ...

  5. android定时操作

    Timer: 代码: Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { ...

  6. 聊聊多线程哪一些事儿(task)之 二 延续操作

    hello,又见面啦,昨天我们简单的介绍了如何去创建和运行一个task.如何实现task的同步执行.如何阻塞等待task集合的执行完毕等待,昨天讲的是task的最基本的知识点,如果你没有看昨天的博客, ...

  7. 执行Sqlserver中waitfor delay延时操作或waitfor time定时操作

    private static string connectionString = RBAC.Dal.DataRootBase.ConnectionString; private SqlConnecti ...

  8. djang-异步——定时操作

    django本身是一个同步框架,flask也是,所以要把它变成异步操作的话还得专门设置一下 我的这个系统呢是windows系统,python3.7的 所以有的库是不可以兼容的 ,然后到时候会稍微修改一 ...

  9. Spring 定时操作业务需求

    1.定时分析 在业务需求中有的需要检测用户的状态,通过对用户状态的检测做出对此状态相应的操作,如果这种检测由运营人工检测,不仅工作量大,而且准确性不高,人工无法很好的完成工作: 问题根源:在检测用户状 ...

随机推荐

  1. 使用API调用外部程序并监控程序状态

    Public Type SHELLEXECUTEINFO    cbSize As Long    fMask As Long    hwnd As Long    lpVerb As String  ...

  2. Spring cloud 两种服务调用方式(Rest + Ribbon) 和 Fegin方式

    1:Rest + Ribbon @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } @Auto ...

  3. Git----时光穿梭机01

    看这篇文章之前可以先阅读  https://www.cnblogs.com/cxq0017/p/9645944.html 创建版本库这篇文章 我们已经成功地添加并提交了一个readme.txt文件,现 ...

  4. kubelet disk 压力

    systemctl stop docker mv /var/lib/docker /data/lib ln -s /data/lib/docker /var/lib/docker systemctl ...

  5. LevelDB Version

    [LevelDB Version] Version 保存了当前磁盘以及内存中所有的文件信息,一般只有一个Version叫做"current" version(当前版本).Level ...

  6. 54. Spiral Matrix (Graph)

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  7. Search Quick Union Find(图的存储结构)

    Quick Find:适用于search频繁的情况 每个节点有一个id值,id相同表示两个节点相连通.在union时要将等于某一个id值都改成另一个id值 Quick Union: 适用于union频 ...

  8. 【总结整理】关于挪车和虚拟号的思考-转载v2ex

    https://www.baidu.com/link?url=A7wiF1JpOkT6Juo0nNHKcum0OiQsnRj-EZkQfjc3xB-noUeLy3HEY-4plbFmPmuJ& ...

  9. Step By Step Hibernate Tutorial Using eclipse WTP[z]

     [shivasoft.in/blog/sql/myqsl/step-by-step-hibernate-tutorial-using-eclipse-wtp/] Hibernate is the O ...

  10. div清空填充

    1.清空 $('#editPrize').empty(); 2.填充 var html= '<span>追加</span>'; $('#editPrize' ).append( ...