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
- 从工厂中获取Scheduler实例
- 定义job
- 定义trigger
- 使用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!");
}
}
}
还不快抢沙发