在C#中使用 System.Threading.Timer 实现定时任务
在C#中使用 System.Threading.Timer 实现定时任务 (qq.com)
前言
在编写应用程序过程中,高效的任务调度都是必不可少的,无论是在实现后台服务、自动化任务或者定期数据处理。在.NET中,System.Threading.Timer 类提供了一种强大而简单的方法来计划任务以特定时间间隔运行。本文将介绍如何使用System.Threading.Timer实现有效地处理周期性和延迟任务。
计时器
System.Threading.Timer 类是线程命名空间的一部分。使用它,允许我们按指定的时间间隔执行回调方法。这个计时器与其它计时器机制不同,System.Threading.Timer 使用线程池线程来执行回调,使其适用于不需要精确计时的周期性任务。
1、了解关键概念
时间间隔(period):每次执行回调方法的时间间隔(单位:毫秒);到期时间(dueTime):计时器初始化后,延迟多少时间(单位:毫秒)执行回调方法;方法参数(state):传递给回调方法的可选参数,用于传递其他信息;回调方法(Callback):要定期执行的方法,实际执行任务内容;
2、使用步骤
首先,创建计时器1、定义回调方法2、初始化 Timer 实例的到期时间、时间间隔、 回调方法及方法参数。其次,启动计时器计时器在创建时自动启动。然后,释放计时器正确处理计时器,释放不再需要的资源。
3、更改计时器间隔
使用Change方法更新到期时间或期间。
// 到期时间5秒和时间间隔2分钟
timer.Change(TimeSpan.FromSeconds(5),TimeSpan.FromMinutes(3));
4、停止计时器:
通过使用Change方法将到期时间和时间段设置为超时,实现无限停止计时器。或使用Dispose方法释放计时器资源,实现停止计时器。
// 将到期时间和时间段设置为超时
timer.Change(Timeout.Infinite, Timeout.Infinite);
// 释放计时器资源
timer.Dispose();
基本示例
如何使用 System.Threading.Timer 每分钟执行一次任务。
namespace Fountain.WinConsole.OtherDemo
{
internal class Program
{
// 声明计时器
private static Timer timer;
/// <summary>
/// 程序入口
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//创建一个计时器,在初始延迟为1秒后每1分钟执行回调方法一次
timer = new Timer(CallbackConsole, null, 1000, 60000);
// 等待输入回车退出
Console.WriteLine("按[Enter]退出。");
// 等待接收输入
Console.ReadLine();
}
/// <summary>
///
/// </summary>
/// <param name="state">回调方法参数</param>
private static void CallbackConsole(object state)
{
try
{
Console.WriteLine($"执行方法时间: {DateTime.Now}");
}
catch (Exception exception)
{
Console.WriteLine(exception.ToString());
}
}
}
}
事项
1、回调方法执行的最小化耗时: 较小化耗时以避免阻塞线程池线程,如果是冗长的操作,则不建议使用。
2、处理异常:确保捕获并处理回调方法中的异常,因为未经处理的异常可能会终止应用程序。3、避免重叠执行:确保回调方法在下次调用之前完成。
小结
以上是System.Threading.Timer实现定时任务的内容,通过了解其使用,我们可以有效地管理周期性、延迟任务,优化资源使用,并确保应用程序平稳运行。希望本文能为大家有所帮助,如有不到之处,请多多包涵
在C#中使用 System.Threading.Timer 实现定时任务的更多相关文章
- .NET中System.Diagnostics.Stopwatch、System.Timers.Timer、System.Threading.Timer 的区别
1.System.Diagnostics.Stopwatch Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间. 在典型的 Stopwatch 方案中,先调用 ...
- System.Threading.Timer 定时器的用法
System.Threading.Timer 是C# 中的一个定时器,可以定时(不断循环)执行一个任务.它是在线程上执行的,具有很好的安全性.为此 .Net Framework 提供了5个重载的构造 ...
- System.Threading.Timer使用心得
System.Threading.Timer 是一个使用回调方法的计时器,而且由线程池线程服务,简单且对资源要求不高. "只要在使用 Timer,就必须保留对它的引用."对于任何托 ...
- System.Threading.Timer的使用技巧
转自:http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml# System.Threading.Timer timer = ...
- System.Threading.Timer如何正确地被Dispose
System.Threading.Timer是.NET中一个定时触发事件处理方法的类(本文后面简称Timer),它背后依靠的是.NET的线程池(ThreadPool),所以当Timer在短时间内触发了 ...
- System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的 区别和用法
System.Windows.Forms.Timer执行的时候,如果你在过程中间加一个sleep整个的界面就死掉了,但是另外两个没有这个情况,System.Timers.Timer.System.Th ...
- 当时钟事件声明为过程变量 让system.threading.timer时钟失效
这个项目的小模块就是画label 控件到tablepayoutpanel表单 之中, 中间用到了时钟,事件(带返回值的),哈希表 .由于时钟定义在 form1的启动构造函数中导致了form1,启动完毕 ...
- c# 多线程之-- System.Threading Timer的使用
作用:每隔多久去执行线程里的方法. class ThreadTimerDemo { static void Main(string[] args) { // Create an AutoResetEv ...
- 定时器:Timer:System.Threading.Timer类(转)
最近的一个项目有一些地方需要用到定时功能,在设计过程中,突然发现.net的Timer类居然还有很多我以前没有用过的功能,这里就跟大家分享一下 注:这里的Timer类特指System.Threading ...
- System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的差别和分别什么时候用
System.Windows.Forms.Timer.System.Timers.Timer.System.Threading.Timer的 区别和用法http://space.itpub.net/1 ...
随机推荐
- panic: qtls.ConnectionState not compatible with tls.ConnectionState
问题重现 之前一个 go-micro 1.18 的项目 执行 go run main.go 命令时出现以下报错 go run main.go panic: qtls.ConnectionState n ...
- Readers and Writers JSON Framework(2)
我们关心json的读写.特别在datasnap中,关于使用stream更是显得重要.其实轮子都帮你做好了,你不知道整经再研究就是一个悲哀.除非你要研究. 回正题: 处理json有二套框架. JSON ...
- 解决 Maven 打包项目中 Excel 文件乱码问题
在 Java 项目开发过程中,我们常常会使用 Maven 来管理项目依赖和进行项目打包.当涉及到使用 Freemarker 导出 Excel 文件时,不少开发者可能会遇到一个让人头疼的问题 --Exc ...
- PC端自动化测试实战教程-2-pywinauto 启动PC端应用程序 - 上篇(详细教程)
1.简介 经过上一篇的学习.介绍和了解,想必小伙伴或者童鞋们,已经见识到pywinauto的强大了,今天继续介绍pywinauto,上一篇已经可以打开计算器了,这里宏哥在提供其他方法进行打开计算器和非 ...
- MySQL 中 EXISTS 和 IN 的区别是什么?
在 MySQL 中,EXISTS 和 IN 都用于在子查询中进行条件判断,但它们的使用场景和性能有一定区别.以下是 EXISTS 和 IN 的主要区别: 1. 功能和用法 EXISTS: EXISTS ...
- 漏洞预警 | CraftCMS模板注入漏洞
0x00 漏洞编号 CVE-2024-56145 0x01 危险等级 高危 0x02 漏洞概述 CraftCMS是一个灵活的.易于使用的内容管理系统. 0x03 漏洞详情 CVE-2024-56145 ...
- vue3 学习-初识体验-常见指令v-for和v-model
继续通过小案例来体验一些常用的指令, 以经典的todolist进行展示. 首先呢通过 v-for 指令进行dom循环. v-for 通常是在循环dom的编写的同时遍历数据进行填充. <!DOCT ...
- 操作系统:设备I/O -- 如何在内核中注册设备?
在上节课里,我们对设备进行了分类,建立了设备与驱动的数据结构,同时也规定了一个驱动程序应该提供哪些标准操作方法,供操作系统内核调用.这相当于设计了行政部门的规章制度,一个部门叫什么,应该干什么,这些就 ...
- #React中类组件中关于回调函数的一个问题
在ES6中,类中定义的方法,是放在原型对象的,供实例对象引用. //创建一个Person类 class Person { constructor(name,age) { this.name = nam ...
- 初次使用 Jetbrains Rider 编写 C#(.Net) 代码
前段时间,Jetbrains公司 公布了 Rider IDE 对非商业用途免费,看到很多业界的朋友都用到这个IDE,今天便下载下来使用一下. 1.界面的差异 Rider的界面跟我前段时间学习调试安卓代 ...