1.引入
using IScheduler = Quartz.IScheduler;
2.代码
/// <summary>
/// 添加定时任务,每隔24h执行一次
/// 删除超过24h的AllcomputeDataTempFiles下的文件
/// </summary>
private static void CreateTimeJob()
{
//1.创建调度单元
Task<IScheduler> tsk = StdSchedulerFactory.GetDefaultScheduler();
IScheduler scheduler = tsk.Result;
//2.创建一个具体的作业即job(具体的job需要单独在一个文件中执行)
IJobDetail job = JobBuilder.Create<DeleteAllComputeDataFilesJob>().WithIdentity("完成").Build();
//3.创建并配置一个触发器trigger,
ITrigger _CtroTrigger = TriggerBuilder.Create()
.WithIdentity("定时确认")
//.WithSimpleSchedule(x => x.WithIntervalInSeconds(50).RepeatForever())
.WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
.Build()
as ITrigger;
//4.将job和trigger加入到作业调度池中
scheduler.ScheduleJob(job, _CtroTrigger);
//5.开启调度
scheduler.Start();
TPBase.Logger.Info("定时任务启动:超过24h的AllComputeData文件将会被删除!");
}
/// <summary>
/// 删除超过24h的AllcomputeDataTempFiles下的文件
/// </summary>
public class DeleteAllComputeDataFilesJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Task.Run(() =>
{
TPBase.Logger.Info($"当前时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},定时任务执行:删除文件:");
try
{
string folderPath = "AllcomputeDataTempFiles";
// 判断文件夹是否存在
if (Directory.Exists(folderPath))
{
// 列出文件夹下的所有文件
string[] files = Directory.GetFiles(folderPath);
foreach (string file in files)
{
string fileName = Path.GetFileName(file);
List<string> fileNameList = fileName.Split(new char[] { '_', '.' }, StringSplitOptions.RemoveEmptyEntries).ToList();
string dateString = fileNameList[fileNameList.Count() - 2];
long fileCreatTime = long.Parse(dateString + "");
long curTime = DateTimeOffset.Now.ToUnixTimeSeconds();
// 计算时间差(秒)
long timeDifferenceInSeconds = curTime - fileCreatTime;
// 将时间差转换为小时
double timeDifferenceInHours = timeDifferenceInSeconds / 3600.0;
// 比较时间差是否超过24小时
if (timeDifferenceInHours > 24)
{
bool isDelete = FunCommon.DeleteFileIfExists(folderPath, fileName);
if (isDelete == true)
{
TPBase.Logger.Info($" {fileName} 被删除!!");
}
else
{
TPBase.Logger.Error($" {fileName} 删除失败!!");
}
}
}
}
}
catch(Exception ex)
{
TPBase.Logger.Error($"当前时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},定时任务执行失败!!!");
}
});
}
}