zoukankan      html  css  js  c++  java
  • 使用Quartz为C# ASP.NET WebAPI项目配置各种定时工作任务

    1.引用NuGet包,根据项目的.Net Framework选择对应版本即可。本例项目是.Net Framework 4.5.2,选择的Quartz版本是3.0.7

    2.项目下新建文件夹TimedTask,下新建SchedulerServer类和TimedCallInspectContentExtractJob类。

    SchedulerServer类作为Quartz的服务管理类,TimedCallInspectContentExtractJob是具体一个job工作任务的实现类。

    3.补充SchedulerServer内容

    public class SchedulerServer
        {
            private ISchedulerFactory _schedulerFactory;
            private IScheduler _scheduler;

            public static SchedulerServer CreateInstance()
            {
                return new SchedulerServer();
            }

            public virtual async Task Initialize()
            {
                System.Diagnostics.Debug.WriteLine("开始设置定时执行任务");
                _schedulerFactory = new StdSchedulerFactory();
                _scheduler = await _schedulerFactory.GetScheduler();

                //指定具体的任务job
                var job = JobBuilder.Create<TimedCallInspectContentExtractJob>()
                    .WithIdentity("timedCallInspectContentExtractJob", "group1").Build();

                //这个trigger是设置的时间间隔24小时在每天的2:10开始执行任务
                //var trigger = TriggerBuilder.Create().WithIdentity("timedCallInspectContentExtractTrigger", "group1").WithDailyTimeIntervalSchedule(x=>x.WithIntervalInHours(24).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(int.Parse("2"),int.Parse("10"))))
                //    .Build();

                //这个trigger是设置的程序启动之后立即执行了一次触发动作,但是后续没有任何触发动作再执行【只执行一次】
                //var trigger1 = TriggerBuilder.Create().WithIdentity("timedCallInspectContentExtractTrigger",
                //    "group1").StartAt(DateTime.UtcNow).StartNow().Build();

                //这个trigger是设置的程序启动之后立即执行了一次触发动作,并以时间间隔为2分钟后开始尝试执行触发动作
                var trigger1 = TriggerBuilder.Create().WithIdentity("timedCallInspectContentExtractTrigger", "group1").StartAt(DateTime.UtcNow)
                    .StartNow().WithSimpleSchedule(x => x.WithIntervalInMinutes(2).RepeatForever()).Build();

                System.Diagnostics.Debug.WriteLine("定时执行任务设置完成");
                await _scheduler.ScheduleJob(job, trigger1);
            }

            public virtual async Task Start()
            {
                await _scheduler.Start();
            }

            public virtual async Task Stop()
            {
                await _scheduler.Shutdown(true);
            }
        }

    4.补充TimedCallInspectContentExtractJob内容

    public class TimedCallInspectContentExtractJob : IJob
        {
            public async Task Execute(IJobExecutionContext context)
            {
                //编写你的异步代码
            }
        }

    5.设置启动

    public class WebApiApplication : System.Web.HttpApplication
        {
            private readonly SchedulerServer _schedulerServer = SchedulerServer.CreateInstance();
            protected void Application_Start()
            {
                GlobalConfiguration.Configure(WebApiConfig.Register);

                StartTimedTask();
            }

            private void StartTimedTask()
            {
                Task.Run(async () =>
                {
                    try
                    {
                        await _schedulerServer.Initialize();
                        await _schedulerServer.Start();
                        System.Diagnostics.Debug.WriteLine("后台开始尝试上传文件到api接口");
                    }
                    catch (Exception ex)
                    {
                        if (_schedulerServer != null)
                        {
                            await _schedulerServer.Stop();
                            System.Diagnostics.Debug.WriteLine("后台尝试上传文件到api,操作失败,上传任务正在关闭");
                        }
                    }
                });
            }
        }

  • 相关阅读:
    【蓝桥杯/算法训练】Sticks 剪枝算法 (附胜利大逃亡)
    【蓝桥杯/基础练习】回文数、特殊的回文数
    【蓝桥杯/基础练习】十六进制转八进制
    交叉验证
    第一次写博客---交叉验证
    实验五
    汇编语言第二章
    实验四
    实验三
    实验二
  • 原文地址:https://www.cnblogs.com/jeff151013/p/14701325.html
Copyright © 2011-2022 走看看