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


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

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

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

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

     1 /// <summary>
     2     /// 定时任务
     3     /// </summary>
     4     public static class TaskSchedulerService
     5     {
     6         /// <summary>
     7         /// 依赖注入
     8         /// </summary>
     9         public static ServiceProvider serviceProvider;
    10 
    11         /// <summary>
    12         /// 任务调度器
    13         /// </summary>
    14         private static IScheduler scheduler;
    15 
    16 
    17         /// <summary>
    18         /// 开始任务
    19         /// </summary>
    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         /// <summary>
    34         /// 注册任务
    35         /// </summary>
    36         /// <param name="_serviceProvider">依赖注入</param>
    37         /// <returns></returns>
    38         public static async Task RegisterTask(ServiceProvider _serviceProvider)
    39         {
    40             serviceProvider = _serviceProvider;
    41 
    42             //协议到期(每天凌晨两点执行一次)
    43             //创建作业和触发器
    44             var contratJobDetail = JobBuilder.Create<ContractMessageTask>().Build();
    45             var contratTrigger = TriggerBuilder.Create()
    46                                         .WithCronSchedule("0 0 2 * * ?")
    47                                         .Build();
    48             //添加调度
    49             await scheduler.ScheduleJob(contratJobDetail, contratTrigger);
    50         }
    51     }
    52 
    53     /// <summary>
    54     /// 协议到期通知
    55     /// </summary>
    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<IMessageService>();
    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

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

  • 相关阅读:
    高可用性机制
    Moodle课程资源系统安装
    Windows 10 安装 chocolatey
    centos7安装samba服务器
    抽签网页板代码
    CentOS7系统操作httpd服务
    centos7.2下放行端口
    centos7没有netstat命令的解决办法
    Linux
    Linux下常用服务的端口号超详细整理
  • 原文地址:https://www.cnblogs.com/zhangzhang1118/p/12842885.html
Copyright © 2020-2023  润新知