架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 852|回复: 2

[资料] .NET 6 中新的计时器 PeriodicTimer 使用

[复制链接]
发表于 2023-8-2 19:12:40 | 显示全部楼层 |阅读模式
需求:使用 ASP.NET Core 6 新建了一个后台服务去定时轮询获取数据,使用了 System.Timers.Timer 定时器轮询,额外增加了 Monitor 代码来防止同一时间重复执行的问题,虽然能满足我的业务需求,但是不够优雅,使用 .NET 6 新的 PeriodicTimer 定时器能更好的满足业务需求。

作为开发人员,您以前可能在 .NET 中使用过计时器。目前 .NET 中有多种类型的计时器,每种类型都有不同的用途。如下:

  • System.Threading.Timer
  • System.Timers.Timer
  • System.Windows.Forms.Timer
  • System.Web.UI.Timer
  • System.Windows.Threading.DispatcherTimer


.NET 6 中引入了一个新的 Timer —— System.Threading.PeriodicTimer,和之前的几个 Timer 相比一个最大的区别就是,新的 PeriodicTimer 的事件处理可以比较方便地使用异步方式,消除了使用 callback 的机制,减少了使用的复杂度。

.NET 6 引入了一种新的计时器类型,称为PeriodicTimer. 其背后的主要目的PeriodicTimer是避免使用回调。避免回调可以使我们免于处理长期操作中可能发生的内存泄漏,并且我们可以编写async代码而不是sync over async在回调中使用该方法。您可能会处理当前计时器类型的另一个问题是回调重叠。如果您不为回调重叠场景编写代码,您可能会在应用程序中看到意外的行为。

创建 PeriodicTimer 实例非常简单,您需要提供的唯一参数是period值,代码如下:

异步定时后台任务代码:

(完)





上一篇:【转】所有版本的 .NET 中都存在 Base64 解码错误
下一篇:.NET/C# 泛型 T 协变 out 与逆变 in 接口
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-8-2 20:22:23 | 显示全部楼层
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-11-12 09:42:28 | 显示全部楼层
服务停止,CancellationToken 会通知取消任务,会导致抛出:OperationCanceledException 异常
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-29 14:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表