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; }
}
}