net-core-PeriodicTimer

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

复制代码
public class BackgroundTask{
    private  Task? _timerTask;
    private readonly PeriodicTimer _timer;
    private readonly CancellationTokenSource _cts = new();
    public EventHandler dowork;
    public BackgroundTask(TimeSpan interval)
    {
        _timer = new PeriodicTimer(interval);
    }
    public void Start()
    {
        _timerTask = DoWorkAsync();
    }
    private async Task DoWorkAsync()
    {
        try
        {
            System.Console.WriteLine("开始定时任务");

            while (await  _timer.WaitForNextTickAsync(_cts.Token))
            {
                dowork?.Invoke(null,null);
            }
        }
        catch(OperationCanceledException ex){
            Console.WriteLine(ex.Message);
        }
    }
    public async Task StopAsync()
    {
        if  (_timerTask is null)
        {
            return;
        }
        _cts.Cancel();
        await _timerTask;
        _cts.Dispose();
        System.Console.WriteLine("取消定时任务");
    }
}
复制代码

二 待续。。。

 

posted @   vba是最好的语言  阅读(68)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示