はじめに:
オープン・ソース・フレームワークをスケジューリング石英ジョブ、あるOpenSymphonyの 石英のAPI .NET移植 C#で書かれたに基づいて、asp.net、asp.netコアアプリケーションをWinフォームに適用することができます。それは、クラスタを展開するためのより強力な、容易な管理、ジョブスケジューリングフレームワークであり、優れた柔軟性を提供します。
だから、時々プロジェクトは異なるジョブの多くを実行するために異なる時間に必要、または、あなたは、単純または複雑なタスクスケジューラを作成するプロセスを完了するためにそれを使用することができます。
特徴:
1:サポートクラスター、作業グループ、リモートジョブ管理。
2:使いやすい、細かいからトリガーを定義し、離職を誘発します。
3:データベースのサポートは、その上のWindowsサービス、ウェブサイト、Winフォームとをホストすることができます。
コンセプト:
スケジューラジョブスケジューラ
IJob操作インタフェース、継承および実行を実装、実行するロジック特定のジョブを書き込みます。
JobBuilder設定、詳細なジョブ情報(JobDetail)を生成します。
規則に従ってTriggerBuilder、トリガ、トリガを対応するタスクを実行することを計画することができる製造
ステップ:
1は、ISchedulerFactoryを作成し、スケジューラを取得します
2、スケジューラを起動します
3、仕事のタスクを作成します
4.トリガートリガーを作成します。
5、トリガー計画タスクを使用して
対応するAPI
1、IScheduler - スケジューラと対話するための主要なインタフェース
2、IJob - あなたはコンポーネントは、スケジューラ・インタフェースを実行したいです
3、IJobDetail - インスタンスのは、ジョブを定義します
4、ITrigger - ジョブ・スケジューラに定義された成分は、上で実行されます
5、JobBuilderは - JobDetail例を定義または作成する(/ビルドを定義)するために使用される、JobDetailはジョブとして定義され
6、TriggerBuilder - トリガーを定義または確立する、例えば
起動します:
注意:
クォーツ、新しいプロジェクトの後、次のパッケージをインストールする必要があります。
あなたは道のコンソールコマンドでインストールすることができます
インストール・パッケージクォーツ
このようにして、次はまたバージョンのインストールを選択するために使用することができます
まず、参照のスケジューラを作成します:
ISchedulerFactory schedFact = 新しいStdSchedulerFactory(); IScheduler SCHED =を待つ schedFact.GetSchedulerを();
第二に、スケジューラを起動します。
待つ sched.Startを();
第三に、IJobを達成するために:
ConsoleJob.cs達成IJob、Executeメソッドのビジネスロジックを処理するように調製した、クオーツ係るシステム構成、通常処理
/// <summary> /// 实现IJob,Execute方法里编写要处理的业务逻辑 /// </summary> public class ConsoleJob : IJob { public Task Execute(IJobExecutionContext context) { return Console.Out.WriteLineAsync($"ConsoleJob执行工作 在当前时间{DateTime.Now}--上一次执行时间:{DateTime.Now.AddSeconds(-5)}"); } }
四、创建trigger:(建立一个某个时间点的触发器,并且每5秒执行一次)
ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") //触发器 组 .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) .Build();
五、触发器执行任务:
await sched.ScheduleJob(job, trigger);
将几个步骤整合后代码如下:
/// <summary> /// 任务调度的使用过程 /// </summary> /// <returns></returns> public async static Task Run() { // 1.创建scheduler的引用 ISchedulerFactory schedFact = new StdSchedulerFactory(); IScheduler sched = await schedFact.GetScheduler(); //2.启动 scheduler await sched.Start(); // 3.创建 job IJobDetail job = JobBuilder.Create<ConsoleJob>() .WithIdentity("job1", "group1") .Build(); // 4.创建 trigger (创建 trigger 触发器) ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") //触发器 组 .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) .Build(); // 5.使用trigger规划执行任务job (使用触发器规划执行任务) await sched.ScheduleJob(job, trigger); }
运行:
间隔5秒执行一次后的效果:
附加:
这里使用的quartz为3.x 版本,整个版本相对于2.0版本进行了大量的修改,正式支持了.NET Core 和async/await
引用张队文章的内容:
3.x 版本的新功能:
-
支持 async/await 基于任务的作业,内部以async/await工作
-
支持.NET Core / netstandard 2.0和.NET Framework 4.5.2及更高版本
-
通过提供程序名称SQLite-Microsoft支持Microsoft.Data.Sqlite,旧的提供程序SQLite也仍然有效,还可以用
-
增加了对SQL Server内存优化表的初步支持和Quartz.Impl.AdoJobStore.UpdateLockRowSemaphoreMOT
-
从依赖关系中删除Common.Logging
-
删除C5 Collections,使用.NET框架内置的Collections
-
在插件启动时添加对作业调度XML文件的验证
-
在TimeZoneUtil中添加对额外自定义时区解析器功能的支持
API 不兼容
- 作业和插件分离到一个单独的程序集/ NuGet包里 Quartz.Jobs和Quartz.Plugins
- ADO.NET提供程序名称已经简化,提供程序名称不带版本,例如SqlServer-20 => SqlServer
- API方法已经被重新定义,主要使用IReadOnlyCollection,这隐藏了两个HashSets和List
- LibLog已经隐藏到内部(ILog等),就像它本来打算的那样
- SimpleThreadPool 消失了,用系统的线程池取代了
- 调度程序方法已经改为基于Task,记得要await 它们
- IJob接口现在返回一个Task
- 一些IList属性已经更改为IReadOnlyList ,以正确反映意图
- SQL Server CE支持已被删除
- DailyCalendar现在使用日期时间排除日期,并具有ISet接口来访问它们
- IObjectSerializer有新的方法,必须实现 void Initialize()
- IInterruptableJob取消了上下文的CancellationToken
总结:
1.其实在实际项目中,可以将上面的方法进行封装处理,形成不同的任务,特别是处理多任务的时候,在不同的job中调用不同的trigger,后续会继续完善开发
2.quartz还有更多的用法,可以参考资料:Quartz.Net官方文档 和 Quartz.Net开源地址