1. 程式人生 > 實用技巧 >Quartz定時任務+window服務的簡單應用

Quartz定時任務+window服務的簡單應用

  1. 首頁在專案中安裝Quartz的Nuget包
  2. 新建一個任務, 也可以稱為作業

     public class MyJob : IJob
        {
            private int _Count = 0;
            public MyJob() {
                this._Count = new Random().Next(100, 999);
                Console.WriteLine("_count = " +this._Count);
            }
            public async Task Execute(IJobExecutionContext context)
            {
                
    await Task.Run(()=> { try { Console.WriteLine("MyJob 正在執行 執行緒id= "+Thread.CurrentThread.ManagedThreadId); Console.WriteLine("MyJob 正在執行 執行緒id= "+Thread.CurrentThread.ManagedThreadId); Console.WriteLine("MyJob 正在執行 執行緒id=
    "+Thread.CurrentThread.ManagedThreadId); Console.WriteLine("MyJob 正在執行 執行緒id= "+Thread.CurrentThread.ManagedThreadId); Console.WriteLine("MyJob 正在執行 執行緒id= "+Thread.CurrentThread.ManagedThreadId); Console.WriteLine("MyJob 正在執行 執行緒id= "+Thread.CurrentThread.ManagedThreadId); Console.WriteLine(
    "MyJob 正在執行 執行緒id= "+Thread.CurrentThread.ManagedThreadId); Logger log = new Logger(typeof(MyJob)); log.Info("MyJob 正在執行 執行緒id = "+Thread.CurrentThread.ManagedThreadId); JobDataMap data= context.JobDetail.JobDataMap; //獲取引數 // Console.WriteLine($"JobDetail :{data1.GetString("aaa1")}"); } catch (Exception ex) { Console.WriteLine(ex.Message); } }); } }
    MyJob

  3. 把任務和一個觸發器關聯起來
     public class DispatcherManager
        {
            public async static Task Init() {
                StdSchedulerFactory factory = new StdSchedulerFactory();
                IScheduler scheduler = await factory.GetScheduler();
                await scheduler.Start();
                //建立作業
                IJobDetail jobdetail = JobBuilder.Create<MyJob>()
                    .WithIdentity("testjob", "group1")//起名稱
                    .WithDescription("this is testjob")
                    .Build();
               //建立觸發器
                ITrigger trigger = TriggerBuilder.Create()
                                    .WithIdentity("testjob", "group1")//group1必須保持一致 
                                    //.StartAt(DateTime.Now.AddSeconds(2))//那個時間啟動
                                    .StartNow() //這個是馬上啟動
                                    .WithCronSchedule("5/10 * * * * ?")//時間規則
                                    .WithDescription("this is testjob`s trigger")
                                    .Build();
                //非同步執行
                await scheduler.ScheduleJob(jobdetail,trigger);
                //Console.WriteLine("作業完成");
            }
        }

  4. 呼叫執行
     static void Main(string[] args)
            {
                try
                {
                    DispatcherManager.Init().GetAwaiter().GetResult();
                }
                catch (Exception ex)
                {
    
                    Console.WriteLine(ex.Message);
                }
                Console.Read();
    
            }

  5. 新建一個window 服務專案

  6. 在service中呼叫Init();
  7. 設定服務名稱

  8. 安裝與解除安裝服務: 找到自己的專案路徑 下 bin\debug 下的xxxService.exe檔案

    管理員身份開啟cmd
    
    //安裝服務
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil  "自己專案路徑"\test.WindowsService.exe
    
    //解除安裝服務
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil /u  "自己專案路徑"\test.WindowsService.exe

  9. 現在這個服務就可以在系統服務中看到了,啟動它, 就會定時執行你寫好的任務了。是不是很簡單呢??