雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

c# quartz 动态生成多个任务

2024-09-26 12

在 C# 中使用 Quartz.NET 动态生成多个任务可以通过以下步骤实现:

安装 Quartz.NET 包

首先,你需要在你的项目中安装 Quartz.NET 包。你可以在 NuGet 包管理器中搜索并安装 Quartz 包。

创建 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...");
        });
    }
}

创建调度器和触发器

在你的代码中创建一个调度器(Scheduler)和一个触发器(Trigger)来配置和管理你的任务。

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)
                .RepeatForever())
            .Build();

        await scheduler.ScheduleJob(job, trigger);
    }
}

动态生成多个任务

在你的应用程序中,根据需要动态生成多个任务。

public class Program
{
    public static async Task Main(string[] args)
    {
        await SchedulerManager.Start();

        // 动态生成更多的任务
        await SchedulerManager.CreateJob("job2", "group2", 5); // 创建名为 "job2" 的任务,每隔5秒执行一次
        await SchedulerManager.CreateJob("job3", "group3", 10); // 创建名为 "job3" 的任务,每隔10秒执行一次
    }
}

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

这样,你就可以在程序运行时动态生成多个任务。

这只是一个简单的示例,实际情况中可能需要根据具体的业务逻辑和需求来调整和扩展代码。同时,务必在程序关闭前释放调度器资源,以确保任务能够正常结束。

更新于:17天前
赞一波!

文章评论

评论问答