在MVC项目中简单实现定时任务

2021-03-11 01:35

阅读:472

标签:serialize   cep   div   通知   VID   execution   figure   quartz   schedule   

emmm,之前因为项目的原因,得用到定时任务,没有使用Quartz跟Hangfire

而是直接在startup文件下ConfigureServices中注入如下代码:

//定时任务
            var provider = services.BuildServiceProvider();
            TaskSchedulerService.RegisterTask(provider).Wait();

而在项目的Service层中加入文件TaskSchedulerService.cs

技术图片技术图片
 1 /// 
 2     /// 定时任务
 3     /// 
 4     public static class TaskSchedulerService
 5     {
 6         /// 
 7         /// 依赖注入
 8         /// 
 9         public static ServiceProvider serviceProvider;
10 
11         /// 
12         /// 任务调度器
13         /// 
14         private static IScheduler scheduler;
15 
16 
17         /// 
18         /// 开始任务
19         /// 
20         static TaskSchedulerService()
21         {
22             NameValueCollection props = new NameValueCollection
23             {
24                 {
25                     "quartz.serializer.type", "binary"
26                 }
27             };
28             var schedulerFactory = new StdSchedulerFactory(props);
29             scheduler = schedulerFactory.GetScheduler().Result;
30             scheduler.Start().Wait();
31         }
32 
33         /// 
34         /// 注册任务
35         /// 
36         /// 依赖注入
37         /// 
38         public static async Task RegisterTask(ServiceProvider _serviceProvider)
39         {
40             serviceProvider = _serviceProvider;
41 
42             //协议到期(每天凌晨两点执行一次)
43             //创建作业和触发器
44             var contratJobDetail = JobBuilder.Create().Build();
45             var contratTrigger = TriggerBuilder.Create()
46                                         .WithCronSchedule("0 0 2 * * ?")
47                                         .Build();
48             //添加调度
49             await scheduler.ScheduleJob(contratJobDetail, contratTrigger);
50         }
51     }
52 
53     /// 
54     /// 协议到期通知
55     /// 
56     public class ContractMessageTask : IJob
57     {
58         public Task Execute(IJobExecutionContext context)
59         {
60             return Task.Run(() =>
61             {
62                 try
63                 {
64                     Logs.Info("协议到期通知定时任务开始。");
65                     var _MessageService = TaskSchedulerService.serviceProvider.GetService();
66                     _MessageService.ContractMessageTask().Wait();
67                     Logs.Info("协议到期通知定时任务完成。");
68                 }
69                 catch (Exception e)
70                 {
71                     Logs.Error(e.GetMsgDetail("协议到期通知定时任务错误:"));
72                     throw e;
73                 }
74             });
75         }
76     }
namespace Application

 

就可以很简便的实现定时任务啦,目前任务量不大的情况下运行还是挺稳定的

 

在MVC项目中简单实现定时任务

标签:serialize   cep   div   通知   VID   execution   figure   quartz   schedule   

原文地址:https://www.cnblogs.com/zhangzhang1118/p/12842885.html


评论


亲,登录后才可以留言!