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("取消定时任务"); } }
二 待续。。。