Quartz.net的簡單封裝

新建一個QuartzClass類庫項目。nuget控制臺輸入


image.png

添加Quartz.net的引用。
我們新建一個JobBase.cs文件,里面有一個Run方法。之后所有的Job都需繼承這個基類,并實現(xiàn)Run方法。
<pre>
namespace LY.QuartzClass
{

public abstract class JobBase
{
    public abstract void Run();

}

}
</pre>

之后新增一個JobInstance.cs類。這個類主要實現(xiàn)IJob接口。
<pre>
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LY.QuartzClass
{
public class JobInstance : IJob
{
public void Execute(IJobExecutionContext context)
{
IDictionary<string, object> jobs = context.JobDetail.JobDataMap;
if (jobs != null)
{
foreach (var item in jobs.Values)
{
try
{
JobBase jobObj = item as JobBase;
jobObj.Run();
}
catch
{
}
}
}
}
}
}
</pre>
在JobInstance類的Execute方法中,我們從JobDataMap中取出JobBase實體,并執(zhí)行Run方法。

下面我們新增一個JobManager.cs類,類內(nèi)只有一個簡單的AddJob方法
<pre>
using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LY.QuartzClass
{
public class JobManage
{
IScheduler schedudler;
public JobManage()
{
schedudler = StdSchedulerFactory.GetDefaultScheduler();
schedudler.Start();
}

    public void AddJob<T>(int Second) where T : JobBase
    {
       
        JobBase jbobj = Activator.CreateInstance<T>();
        IDictionary<string, object> jbData = new Dictionary<string, object>();
        jbData.Add("name", jbobj);

        IJobDetail job1 = JobBuilder.Create<JobInstance>()
            .SetJobData(new JobDataMap(jbData)).Build();

        ITrigger trigger1 = TriggerBuilder.Create()
            .StartNow()
            .WithSimpleSchedule(x => x.WithIntervalInSeconds(Second)
            .RepeatForever()).Build();

        schedudler.ScheduleJob(job1, trigger1);
       
    }

   public void AddJob<T>(string rule) where T : JobBase
    {
        JobBase jbInstance = Activator.CreateInstance<T>();
        IDictionary<string, object> jbData = new Dictionary<string, object>();
        jbData.Add("name", jbInstance);

        IJobDetail job1 = JobBuilder.Create<JobInstance>()
            .SetJobData(new JobDataMap(jbData)).Build();

        ITrigger trigger1 = TriggerBuilder.Create()
            .StartNow()
            .WithCronSchedule(rule).Build();

        schedudler.ScheduleJob(job1, trigger1);
    }
}

}
</pre>
在AddJob時,將Job傳入JobData中。

下面我們進行調(diào)用Test。
新建一個窗體項目,并添加對LY.QuartzClass項目的引用。
新增三個Job類,繼承自JobBase
<pre>
public class FirstJob : JobBase
{
public override void Run()
{
Console.WriteLine(DateTime.Now.ToString());
}
}
</pre>

<pre>
public class SecondJob : JobBase
{
public override void Run()
{
Console.WriteLine(DateTime.Now.ToString() + ":Hello");
}
}
</pre>

<pre>
public class ThirdJob : JobBase
{
public override void Run()
{
Console.WriteLine(DateTime.Now.ToString() + ":CronTest");
}
}
</pre>
在窗體中進行調(diào)用
<pre>
private void button1_Click(object sender, EventArgs e)
{
JobManage job = new JobManage();
job.AddJob<FirstJob>(3);
job.AddJob<SecondJob>(6);
job.AddJob<ThirdJob>("0/5 0-58 9 * * ?");
}
</pre>
結果如下:


image.png
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,873評論 25 709
  • 很多離婚女人會陷入感情的空窗期,因為經(jīng)歷過一段失敗的婚姻,所以對婚姻不再抱有奢望,對感情往往也是抱著隨遇而安的態(tài)度...
    那一日閱讀 325評論 0 2
  • 每一個iOSer都應該看看 Effective Objective- C 2.0
    Chrisss閱讀 289評論 2 1
  • 繽紛的水彩在畫板上融合, 終成晦暗的黑。 這黑, 是黑暗, 是我所摒棄的現(xiàn)實! 斑斕的光輝 在空氣中...
    木葉丶飄閱讀 169評論 0 2
  • 又有一個小伙伴把自己嫁出去了,真替他高興。畢業(yè)兩年,身邊的小伙伴陸陸續(xù)續(xù)都找到了自己的歸屬。真的是打心底替他們開心...
    小魚在變好閱讀 317評論 0 0

友情鏈接更多精彩內(nèi)容