转载

Quartz.net简介

Quartz.net

quartz.net是一个开源的作业调试程序 。 可以和其它软件很好的集成。通常在后台定时计算中用的比较多。

官方开源地址: https://github.com/quartznet/quartznet

​ https://www.quartz-scheduler.net/

支付netcore和netframework 4.5.2 以后的版本。

通过execute() 接口 或者Trigger Lister,jobLister接口来实现 。

可以集成在软件中使用也可以独立使用。

1.通过vs来安装

工具-Nuget包管理器-管理解决方案的程序包-》搜索quartz

Quartz.net简介

demo

  1. 从工厂中获取Scheduler实例
  2. 定义job
  3. 定义trigger
  4. 使用scheduler 执行,按trigger去执行相应的job .
using System;
using System.Collections.Specialized;
using System.Threading.Tasks;

using Quartz;
using Quartz.Impl;
using Quartz.Logging;
namespace ConsoleApp2
{
    public class Program
    {
        private static void Main(string[] args)
        {
            LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());

            RunProgramRunExample().GetAwaiter().GetResult();

            Console.WriteLine("Press any key to close the application");
            Console.ReadKey();
        }

        private static async Task RunProgramRunExample()
        {
            try
            {
                // 从工厂中获取Scheduler实例
                NameValueCollection props = new NameValueCollection
                {
                    { "quartz.serializer.type", "binary" }
                };
                StdSchedulerFactory factory = new StdSchedulerFactory(props);
                IScheduler scheduler = await factory.GetScheduler();

                // 实例开始运行
                await scheduler.Start();

                // 定义一个和HelloJob类关联的job
                IJobDetail job = JobBuilder.Create<HelloJob>()
                    .WithIdentity("job1", "group1")
                    .Build();

                // 使用trigger去运行job,每10秒一次,一直重复执行
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1")
                    .StartNow()
                    .WithSimpleSchedule(x => x
                        .WithIntervalInSeconds(10)
                        .RepeatForever())
                    .Build();

                // 让quartz使用定义好的Triger去执行相应的job
                await scheduler.ScheduleJob(job, trigger);

                // 60秒以后休息
                await Task.Delay(TimeSpan.FromSeconds(60));

                // 关闭scheduler
                await scheduler.Shutdown();
            }
            catch (SchedulerException se)
            {
                Console.WriteLine(se);
            }
        }

        // 简单的log程序,实现Quartz中自带的IlogProvider接口。 
        private class ConsoleLogProvider : ILogProvider
        {
            public Logger GetLogger(string name)
            {
                return (level, func, exception, parameters) =>
                {
                    if (level >= LogLevel.Info && func != null)
                    {
                        Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] [" + level + "] " + func(), parameters);
                    }
                    return true;
                };
            }

            public IDisposable OpenNestedContext(string message)
            {
                throw new NotImplementedException();
            }

            public IDisposable OpenMappedContext(string key, string value)
            {
                throw new NotImplementedException();
            }
        }
    }

    public class HelloJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            await Console.Out.WriteLineAsync("Greetings from HelloJob!");
        }
    }
}
原文  http://www.hechunbo.com/index.php/archives/192.html
正文到此结束
Loading...