using NCC.Dependency; using NCC.Templates.Extensions; using System; namespace NCC.TaskScheduler { /// /// 配置定时任务特性 /// [SuppressSniffer, AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] public class SpareTimeAttribute : Attribute { /// /// 构造函数 /// /// /// public SpareTimeAttribute(double interval, string workerName = default) { Interval = interval; Type = SpareTimeTypes.Interval; WorkerName = workerName; } /// /// 构造函数 /// /// 表达式或配置Key /// public SpareTimeAttribute(string expressionOrKey, string workName = default) { // 支持从配置文件读取 var realValue = expressionOrKey.Render(); // 如果能够转换成整型,则采用间隔,间隔时间必须大于 0 if (long.TryParse(realValue, out var interval) && interval > 0) { Interval = interval; Type = SpareTimeTypes.Interval; } // 否则当作 Cron 表达式 else { CronExpression = realValue; Type = SpareTimeTypes.Cron; } WorkerName = workName; } /// /// 间隔 /// public double Interval { get; private set; } /// /// Cron 表达式 /// public string CronExpression { get; private set; } /// /// 任务名称 /// public string WorkerName { get; private set; } /// /// 任务类型 /// internal SpareTimeTypes Type { get; private set; } /// /// 任务描述 /// public string Description { get; set; } /// /// 只执行一次 /// public bool DoOnce { get; set; } = false; /// /// 立即执行(默认等待启动) /// public bool StartNow { get; set; } = false; /// /// 执行类型 /// public SpareTimeExecuteTypes ExecuteType { get; set; } = SpareTimeExecuteTypes.Parallel; /// /// Cron 表达式格式化方式 /// public object CronFormat { get; set; } } }