在之前的文章 使用 BackgroundService 类在微服务中实现后台任务 中有介绍到如何利用 BackgroundService 来实现后台服务,这里我们依旧利用 BackgroundService 来进行类似 hangfire 的封装。
 OdinPlugs.OdinHostedService 使用方法
 1 后台任务 - 普通任务,立即执行,只执行一次
1 2 3 4 5 6 7 8 9
   | services.AddOdinBgServiceNomalJob(opt => {     opt.ActionJob = () =>     { #if DEBUG         Log.Information($"Service:【 BgService - Nomal - Job - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif     }; });
   | 
 2 后台任务 - 延迟调用,只执行一次
1 2 3 4 5 6 7 8 9 10
   | services.AddOdinBgServiceScheduleJob(opt => {     opt.DueTime = 5000;     opt.ActionJob = () =>     { #if DEBUG         Log.Information($"Service:【 BgService - ScheduleJob - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif     }; });
   | 
 3 后台任务 - 循环任务执行:重复执行的任务,使用常见的时间循环模式
1 2 3 4 5 6 7 8 9 10
   | services.AddOdinBgServiceScheduleJob(opt => {     opt.DueTime = 5000;     opt.ActionJob = () =>     { #if DEBUG         Log.Information($"Service:【 BgService - ScheduleJob - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif     }; });
   | 
 4 后台任务 - 循环任务执行:重复执行的任务(任务执行完后继续自动执行)
1 2 3 4 5 6 7 8 9 10
   | services.AddOdinBgServiceLoopJob(opt => {     opt.ActionJob = () =>     { #if DEBUG         Log.Information($"Service:【 BgService - LoopJob - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif         Thread.Sleep(1000);     }; });
   | 
 5 后台任务 - 自定义任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   | services.AddOdinBgServiceJob(opt => {     Timer timer = null;     void worker(object state)     { #if DEBUG         Log.Information($"Service:【 BgService - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif     }     opt.StartAsyncAction = () =>     {         timer = new Timer(worker, null, 0, 2000);     };     opt.ExecuteAsyncAction = () =>     {
      };     opt.StopAsyncAction = () =>     {         timer?.Change(Timeout.Infinite, 0);     };     opt.DisposeAction = () =>     {         timer?.Dispose();     }; });
   | 
 6 后台任务 - 多任务执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
   | services     .AddOdinBgServiceJob(opt =>     {         Timer timer = null;         void worker(object state)         { #if DEBUG             Log.Information($"Service:【 BgService - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif         }         opt.StartAsyncAction = () =>         {             timer = new Timer(worker, null, 0, 2000);         };         opt.ExecuteAsyncAction = () =>         {
          };         opt.StopAsyncAction = () =>         {             timer?.Change(Timeout.Infinite, 0);         };         opt.DisposeAction = () =>         {             timer?.Dispose();         };     })     .AddOdinBgServiceLoopJob(opt =>     {         opt.ActionJob = () =>         {              #if DEBUG             Log.Information($"Service:【 BgService - LoopJob - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif             Thread.Sleep(1000);         };     })     .AddOdinBgServiceRecurringJob(opt =>     {         opt.Period = TimeSpan.FromSeconds(1);         opt.ActionJob = () =>         {              #if DEBUG             Log.Information($"Service:【 BgService - RecurringJob - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif         };     })     .AddOdinBgServiceNomalJob(opt =>     {         opt.ActionJob = () =>         { #if DEBUG             Log.Information($"Service:【 BgService - Nomal- Job - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif         };     })     .AddOdinBgServiceScheduleJob(opt =>     {         opt.DueTime = 5000;         opt.ActionJob = () =>         { #if DEBUG             Log.Information($"Service:【 BgService - ScheduleJob - Running 】\tTime:【 {DateTime.Now.ToString("yyyy-dd-MM hh:mm:ss")} 】"); #endif         };     });
   | 
具体的代码在 GitHub 