在 C# 中使用 Quartz.NET 动态生成多个任务可以分为以下步骤进行:
1. 安装 Quartz.NET 包
首先,在你的项目中安装 Quartz.NET 包,可以通过以下方式完成:
使用 NuGet 包管理器:搜索并安装 Quartz
包。使用命令行安装: Install-Package Quartz
2. 创建 Job 类
创建一个继承自 IJob
接口的自定义 Job 类,并实现你想要执行的任务逻辑。
using Quartz;
using System;
using System.Threading.Tasks;
public class SampleJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Task.Run(() =>
{
// 这里放置你的任务逻辑
Console.WriteLine("Executing job...");
});
}
}
3. 创建调度器和触发器
在代码中创建调度器(Scheduler)和触发器(Trigger)来配置和管理任务。
SchedulerManager 示例
using Quartz;
using Quartz.Impl;
public class SchedulerManager
{
public static async Task Start()
{
// 获取调度器实例
IScheduler scheduler = await new StdSchedulerFactory().GetScheduler();
// 启动调度器
await scheduler.Start();
// 创建任务
IJobDetail job = JobBuilder.Create<SampleJob>()
.WithIdentity("job1", "group1")
.Build();
// 创建触发器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10) // 每隔 10 秒执行一次
.RepeatForever()) // 无限重复
.Build();
// 关联任务和触发器
await scheduler.ScheduleJob(job, trigger);
}
}
4. 动态生成多个任务
你可以在程序运行时动态生成多个任务。以下是完整示例:
Program 主方法
public class Program
{
public static async Task Main(string[] args)
{
// 启动默认任务
await SchedulerManager.Start();
// 动态生成更多任务
await SchedulerManager.CreateJob("job2", "group2", 5); // 每隔 5 秒执行一次
await SchedulerManager.CreateJob("job3", "group3", 10); // 每隔 10 秒执行一次
}
}
在 SchedulerManager 中添加动态任务方法
在 SchedulerManager
中扩展一个方法,用于动态创建任务:
public static async Task CreateJob(string jobName, string jobGroup, int intervalInSeconds)
{
IScheduler scheduler = await new StdSchedulerFactory().GetScheduler();
IJobDetail job = JobBuilder.Create<SampleJob>()
.WithIdentity(jobName, jobGroup)
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity($"trigger_{jobName}", jobGroup)
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(intervalInSeconds)
.RepeatForever())
.Build();
await scheduler.ScheduleJob(job, trigger);
}
5. 注意事项
调度器的资源释放:
在程序关闭时,务必停止并释放调度器资源,确保任务正常结束。例如:await scheduler.Shutdown();
业务逻辑扩展:
在实际场景中,可能需要根据业务需求进一步调整任务的执行逻辑和触发器的配置。日志管理:
使用日志记录任务的执行情况,以便更好地维护和排查问题。
通过以上步骤,你就可以在程序运行时动态生成多个任务并灵活管理它们。这种方式非常适合需要执行定时任务的应用场景,比如定期数据处理、自动化脚本执行等。
参考:leavescn.com/Articles/Content/1754
关注公众号↑↑↑:DotNet开发跳槽❀