zoukankan      html  css  js  c++  java
  • c# Quartz 简单使用

    public class ActionJob : IJob
        {
            public static Dictionary<string, Action<object>> ActionList { get; } = new Dictionary<string, Action<object>>();
    
            public Task Execute(IJobExecutionContext context)
            {
                return Task.Run(() =>
                {
                    JobDataMap dataMap = context.JobDetail.JobDataMap;
                    string name = dataMap.GetString("key");
                    object value = dataMap.Get("value");
                    if (ActionList.ContainsKey(name))
                    {
                        ActionList[name]?.Invoke(value);
                    }
                });
            }
    
            public static async void CreateJob(Action<object> action, string key, string value, ITrigger trigger)
            {
                var scheduler = await StdSchedulerFactory.GetDefaultScheduler();
                if (!scheduler.IsStarted)
                {
                    await scheduler.Start();
                }
                ActionList.Add(key, action);
                IJobDetail job = JobBuilder.Create<ActionJob>()
                                 .WithIdentity(new JobKey(key)) // name "myJob", group "group1"
                                 .UsingJobData("key", key)
                                 .UsingJobData("value", value)
                                 .Build();
    
                await scheduler.ScheduleJob(job, trigger);      //把作业,触发器加入调度器。
            }
    
            public static void CreateJob(Action<object> action, string key, string value, int seconds)
            {
                // 创建触发器
                ITrigger trigger = TriggerBuilder.Create()
                                            .StartNow()                        //现在开始
                                            .WithSimpleSchedule(x => x         
                                            .WithIntervalInSeconds(seconds)
                                            .RepeatForever())           
                                            .Build();
                CreateJob(action, key, value, trigger);
            }
    
            public static async void Remove(string key)
            {
                var scheduler = await StdSchedulerFactory.GetDefaultScheduler();
                await scheduler.DeleteJob(new JobKey(key));
                ActionList.Remove(key);
            }
        }

    创建一个一秒输出当前时间定时器:

    ActionJob.CreateJob(value=> Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss}") , "writeTime", null, 1);

    第三个参数支持传一个string,传了之后会在第一个参数中value返回

    移除当前定时器

     ActionJob.Remove("writeTime");
    

    原文:https://www.cnblogs.com/zisai/p/13560832.html

  • 相关阅读:
    使用策略模式减少if else
    php 向二维数组中追加元素
    svn update 产生Node remains in conflict的问题
    php对ip地址的处理
    php 对比两个数组中的值是否相等
    jquery 通过attr获取属性只有一个值的解决
    php 一维数组去重
    调整ceph的pg数(pg_num, pgp_num)
    linux-Centos 7下bond与vlan技术的结合[推荐]
    centos 配置vlan
  • 原文地址:https://www.cnblogs.com/zisai/p/13560832.html
Copyright © 2011-2022 走看看