.Net 6中的PeriodTimer介绍

.net 6中新增了一个异步计时器PeroidTimer,相对普通Timer的回调, 它的模型更简单。

var       second = TimeSpan.FromSeconds(3);
 using var timer  = new PeriodicTimer(second);

while (await timer.WaitForNextTickAsync())
{
    Console.WriteLine($"Tick {DateTime.Now}");
}

关于WaitForNextTickAsync的处理策略,MSDN有点语焉不详,我以前面代码中这个周期为3s的Timer为例,

简单测了下:

1. 执行时间小于Timer周期:

将每个任务执行时间调整到2s,查看输出:

Tick 2022/1/7 11:30:58
    Tick 2022/1/7 11:31:01
    Tick 2022/1/7 11:31:04

2. 执行周期大于Timer周期:

将每个任务执行时间调整到5s,查看输出:

Tick 2022/1/7 11:33:08
    Tick 2022/1/7 11:33:13
    Tick 2022/1/7 11:33:18
    Tick 2022/1/7 11:33:23

通过这两个例子,可以总结出:

  • 当任务执行时间小于周期时,下次触发的时间是上次触发时间+周期
  • 当任务执行时间大于周期时,下次立即触发

这个周期策略可以说时非常实用了,后续就用PeriodicTimer代替循环调用Task.Delay了

到此这篇关于.Net 6中的PeriodTimer介绍的文章就介绍到这了,更多相关.Net 6中的PeriodTimer内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • .Net 6中的PeriodTimer介绍

    .net 6中新增了一个异步计时器PeroidTimer,相对普通Timer的回调, 它的模型更简单. var       second = TimeSpan.FromSeconds(3);  using var timer  = new PeriodicTimer(second); while (await timer.WaitForNextTickAsync()) {     Console.WriteLine($"Tick {DateTime.Now}"); } 关于WaitFo

  • java 中的封装介绍及使用方法

    java 中的封装介绍及使用方法 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问. 要访问该类的代码和数据,必须通过严格的接口控制. 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段. 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性. 封装的优点 1. 良好的封装能够减少耦合. 2. 类内部

  • Java 中的 BufferedReader 介绍_动力节点Java学院整理

    BufferedReader 介绍 BufferedReader 是缓冲字符输入流.它继承于Reader. BufferedReader 的作用是为其他字符输入流添加一些缓冲功能. BufferedReader 函数列表 BufferedReader(Reader in) BufferedReader(Reader in, int size) void close() void mark(int markLimit) boolean markSupported() int read() int

  • oracle中where 子句和having子句中的区别介绍

    1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 Where和Having都是对查询结果的一种筛选,说的书面点就是设定条件的语句.下面分别说明其用法和异同点. 注:本文使用字段为oracle数据库中默认用户scott下面的emp表,sal代表员工工资,deptno代表部门编号. 一.聚合函数 说

  • Java中Arrays的介绍及使用方法示例

    arrays介绍 java.util.Arrays是一个与数组相关的工具类,里面提供了大量的静态的方法,用来实现数组常见的操作. public static String toString(数组):将参数数组编程字符串(按照默认的格式:{元素1.元素2.元素3-}) public static Void sort(数组):按照默认升序(从小到大)对数组元素进行排序 备注: 1.如果是数值的话,sort默认按照升序从小到大 2.如果是字符串,sort按照字母升序排列 3.如果是自定义类型,那么自定

  • Vue filter 过滤器、以及在table中的使用介绍

    使用方法: // 双花括号中 {{ isActive | isActiveFitlter}} // 在v-bind 中 <div v-bind:id=" isActive | isActiveFitlter"></div> 一.组件中定义本地 Filter filters:{ isActiveFitlter : (value)=>{ return value===1?'激活':'冻结' } } 二.创建Vue实例前定义全局过滤器 Vue.filter('i

  • 有关Java中的BeanInfo介绍

    目录 1.JavaBean介绍 2.JavaBean的自省 3.JavaBean内省工具Introspector 4.JavaBean内省结果BeanInfo 5.内省结果BeanInfo的类型 6.Spring的BeanUtils.copyProperties 7.BeanUtils并发问题优化 8.BeanUtils Setter属性识别优化 9.BeanUtils 性能测试 1.JavaBean介绍 维基百科JavaBean的定义:JavaBeans是Java中一种特殊的类,可以将多个对象

  • vue中install方法介绍

    目录 1.全局注册组件 2.全局自定义指令 vue提供install可供我们开发新的插件及全局注册组件等 install方法第一个参数是vue的构造器,第二个参数是可选的选项对象 export default { install(Vue,option){ 组件 指令 混入 挂载vue原型 } } 1.全局注册组件 import PageTools from '@/components/PageTools/pageTools.vue' import update from './update/in

  • Vue中props用法介绍

    ​前言: 在Vue中通过props,可以将原本孤立的组件串联起来,也就是可以子组件可以接收父组件传递过来的data,比如子组件想要引用父组件的数据,那么在props里面声明一个变量,这个变量就可以引用父元素的数据. 实例演示: 子组件: <template> <div> <h3>我是{{name}},今年{{age}}岁,爱好:{{hobby}}</h3>,{{flag}} </div> </template> <script&

  • Java 中的抽象介绍

    目录 1.抽象类和抽象方法 2.何时在示例中使用抽象类和抽象方法 3.封装与数据抽象 4.抽象的优点 前言: 数据抽象是一种仅向用户显示基本细节的属性.不向用户显示琐碎或非必需的单元.例如:汽车被视为汽车而不是其单个组件. 数据抽象也可以定义为仅识别对象所需特征而忽略不相关细节的过程.对象的属性和行为将其与其他类似类型的对象区分开来,也有助于对对象进行分类/分组. 考虑一个男人开车的真实例子.男人只知道踩油门会提高车速或踩刹车会停车,但他不知道踩油门车速实际上是如何增加的,他不知道汽车的内部机制

随机推荐