net-core-PeriodicTimer

发布时间 2023-06-08 10:59:27作者: 斯蒂芬斯

一 在.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("取消定时任务");
    }
}

二 待续。。。