namespace OSS.Tools.TimerJob; /// /// 任务定时器 基类 /// public class TimerTriggerJob : Internal_BaseExecutor, IDisposable { private Timer? _timer; private CancellationToken _cancellationToken = CancellationToken.None; #region 构造函数 /// /// 触发器配置信息 /// public TimerTriggerSetting Setting { get; } /// /// 构造函数 /// /// 触发器配置信息 public TimerTriggerJob(TimerTriggerSetting setting) { Setting = setting; } #endregion #region 重写内部方法 internal override Task InternalStartJob(CancellationToken cancellationToken) { return StartTimerTrigger(cancellationToken); } internal override Task InternalStopJob(CancellationToken cancellationToken) { return StopTimerTrigger(cancellationToken); } #endregion #region 定时器 开始 结束方法 /// /// 配置并触发定时器 /// /// private Task StartTimerTrigger(CancellationToken cancellationToken) { if (cancellationToken != CancellationToken.None) { _cancellationToken = cancellationToken; } if (_timer == null) _timer = new Timer(ExecuteJob, null, Setting.DueTime, Setting.PeriodTime); else _timer.Change(Setting.DueTime, Setting.PeriodTime); return Task.CompletedTask; } /// /// 停止定时器 /// private Task StopTimerTrigger(CancellationToken cancellationToken) { _timer?.Change(Timeout.Infinite, Timeout.Infinite); return Setting.JobExecutor.StopAsync(cancellationToken); } private void ExecuteJob(object? obj) { Setting.JobExecutor?.StartAsync(_cancellationToken).Wait(_cancellationToken); } /// void IDisposable.Dispose() => _timer?.Dispose(); #endregion }