在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 每分钟执行一次任务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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实现定时任务的内容,通过了解其使用,我们可以有效地管理周期性、延迟任务,优化资源使用,并确保应用程序平稳运行。希望本文能为大家有所帮助,如有不到之处,请多多包涵
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-08-04 C# WinForm 多线程启动提示 DragDrop 注册失败