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
demo
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!"); } } }