首先,创建一个空类,在空类中添加NutGet包(项目中想简单实现的话可以不用定义类直接一个Api就行),我这用到了一个API和一个类库

 

在新建的infractrostuer中新建一个类

此类为工作类,GPT回答:

Quartz 使用作业工厂来实例化作业对象,以便在调度器中执行作业。通过自定义作业工厂,可以自定义实例化作业的逻辑,例如使用依赖注入容器创建作业实例。

也就是说这里是定义自己需要执行的规则

    /// <summary>
    /// 工厂类
    /// </summary>
    public class JobFactory : IConfigureOptions<QuartzOptions>    //:IJobFactory
    {
        public void Configure(QuartzOptions options)
        {
            var jobKey = JobKey.Create(nameof(WCSJob));//创建一个作业键
            options

                   .AddJob<WCSJob> //添加一个工作
                        (JobBuilder => JobBuilder.WithIdentity(jobKey))//为触发器设置唯一                                        的标识

                   .AddTrigger//添加触发器
                        (trigger => trigger
                            .ForJob(jobKey)//将触发器关联到指定的作业
                            .WithCronSchedule("0/1 * * ? * *"));//Cron表达式(每秒执行一次)
                            #region 简单调度规则
                            //.WithSimpleSchedule
                            //(scheduler=>scheduler
                            //.WithIntervalInSeconds(5)Cycle间隔五秒
                            //.RepeatForever()));无限执行
                            #endregion 
        }
    }

第二个类中,调度器

GPT回答:

Quartz 的核心组件,用于调度和执行作业。调度器是负责接收作业请求、创建和管理触发器、调度和执行作业的中心控制器。通过调度器,可以配置和管理作业、触发器,以及整个调度的行为。调度器负责按照指定的时间表触发作业的执行,可以手动启动和停止调度器。

就是用来调度任务的

 

/// <summary>
    /// 调度器
    /// </summary>
    public static class JobScheduler
    {
        /// <summary>
        /// 拓展服务,注入服务
        /// </summary>
        public static void AddInFractrostuer(this IServiceCollection services)
        {
            #region 
            //StdSchedulerFactory stdScheduler = new StdSchedulerFactory();
            //var scheduler = await stdScheduler.GetScheduler();
            //await scheduler.Start();
            //var trigger = TriggerBuilder.Create()
            //    .WithIdentity("TestTrigger", "TestGrop")
            //    .WithCronSchedule("0/1****?").Build();

            //var JobDetail = JobBuilder.Create<WCSJob>()
            //    .WithDescription("简单测试!!!")
            //    .WithIdentity("TesJob","TestGroup")
            //    .Build();
            //object value = await stdScheduler.ScheduleJob(JobDetail, Trigger);

            //_scheduler = await _schedulerFactory.GetScheduler();
            //_scheduler.JobFactory = _iocjobFactory;
            //_scheduler.Start();
            //var trigger = TriggerBuilder.Create().WithSimpleSchedule(x=>x.WithIntervalInSeconds(2).RepeatForever()).Build();
            //var jobDetail = JobBuilder.Create<WCSJob>().WithIdentity("job","group").Build();
            //await _scheduler.ScheduleJob(jobDetail, trigger);
            //return await Task.FromResult("将触发器和任务器绑定到调度器中完成");
            #endregion
            //添加Quartz服务
            services.AddQuartz(options =>
            {
                options.UseMicrosoftDependencyInjectionJobFactory();//配置quartz,在NET中进行依赖注入容器来创建任务
            });

            services.AddQuartzHostedService(option =>//注册quartz的托管服务,自启动并关闭(优雅)
            {
                option.WaitForJobsToComplete = true;//当关闭时,需要等待执行的任务完成
            });

            services.ConfigureOptions<JobFactory>();//配置任务工厂  因为需要使用工厂依赖注入所以需要配置工厂服务
        }

        public static void LineAll()
        {

        }
    }

第三个类,任务类(切记一定要继承于IJob        )

本文中这是为了展现调度的成果的

 

 /// <summary>
    /// 作业
    /// </summary>
    public class WCSJob:IJob
    {
        public readonly ILogger<WCSJob> logger;

        public WCSJob(ILogger<WCSJob> _logger)
        {
            logger= _logger;
        }
        
        /// <summary>
        /// 实现IJob接口
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task Execute(IJobExecutionContext context)
        {
            logger.LogInformation($"{DateTime.Now}");//当任务正在执行,执行的日志记录并返回compltedTask完成
            return Task.CompletedTask;
        }

    }

 最后在应用程序的入口中,注入我们写的类

 看一下实现的效果

以上的内容是一个小白从各路大神的经验中得来,希望对您有帮助!

路还很长 ,一步步走,请多多进言!!!

 

 

 

更多推荐