.net 5 使用Quratz

1.安装Quratz

using Quratz

using Quratz.Core

using Quratz.impl

第一步:创建作业

第二步:创建调度器

第三步:创建作业细节

第四步:创建触发器

第五步:调度器负责调度作业,关联触发器

 public class WeatherForecastController : ControllerBase
    {
        private readonly DomeFactory factory;

        public WeatherForecastController(DomeFactory factory)
        {
            this.factory = factory;
        }

        public async Task<IActionResult> Index()
        {
            //2.创建调度器
            ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
            var sch = await schedulerFactory.GetScheduler();

            //3.创建JobDetail,关联作业
            var job = JobBuilder.Create<Myjob>()
                .WithIdentity("myjob")
                .WithDescription("我的调度器")
                .Build();

            //4.创建触发器
            var trigger = TriggerBuilder.Create()
                 .WithIdentity("myjob")
                 .WithDescription("我的调度器")
                 .WithSimpleSchedule(
                     x => x.WithIntervalInSeconds(3).RepeatForever()
                 ) 
                 .WithCronSchedule("cron表达式")
                 .Build();

            sch.JobFactory = factory;

            //5.关联触发器和job
            await sch.ScheduleJob(job, trigger);

            //6.启动调度器
            await sch.Start();

            

            return new EmptyResult();
        } 
    }

    public class DomeFactory : IJobFactory
    {
        private readonly IServiceProvider serviceProvider;

        public DomeFactory(IServiceProvider serviceProvider)
        {
            this.serviceProvider = serviceProvider;
        }

        public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
        {
            //Job类型
            Type type = bundle.JobDetail.GetType();

            //返回jobType对应类型的实例
            return serviceProvider.GetService(type) as IJob;
        }

        public void ReturnJob(IJob job)
        {
            var disposable=job as IDisposable;
            disposable.Dispose();
        }
    }

    /// 1.创建作业
    /// </summary>
    public class Myjob : IJob
    {
        private readonly ISchool school;

        public Myjob(ISchool school)
        {
            this.school = school;
        }

        public async Task Execute(IJobExecutionContext context)
        {
            var list = school.getList();

            System.IO.File.AppendAllText(@"d:\asd.txt", DateTime.Now.ToString());
        }
    }

  注入两个服务

 services.AddSingleton<DomeFactory>();
 services.AddSingleton<Myjob>();

  思想:

  使用工厂构造出 将没有有参够咱函数的Myjob 的生成一个有参的构造函数 是依赖注入能够注入

 

posted @ 2022-05-10 23:47  电器小君子  阅读(108)  评论(0)    收藏  举报