zoukankan      html  css  js  c++  java
  • 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler

    在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东。

    .NET Framework有自带的timer,但这个类只能完成一些简单的定时操作,比如间隔多久执行什么操作。遇到一些复杂的定时任务,如从当前时间开始,多少时间后间隔重复执行,timer类处理起来就相对困难了。经过多番查找搜索,终于找到一下比较好用的任务定时器–FluentScheduler,你可以通过Nuget来引用,用程序包管理器执行如下命令即可安装:

    此组件可以在C#和ASP.NET程序中使用,使用方法很简单,官方有使用案例:

    在ASP.NET程序的Global.asax文件中,首先初始化管理器,这样定时器就开启了。

    protected void Application_Start()
    {
    TaskManager.Initialize(new MyRegistry()); 
    }

    更多的应用还需自已实际操作,在此就不一一列举了。

    用了FluentScheduler后,再也比想用timer计时器了。

    FluentScheduler 是 .Net 下,可以让你轻松实现定时任务的工具,不需要再去写Windows服务了,更重要的是时间设置起来灵活很多,定时任务难点不就是在这么。

    1.nuget包

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="FluentScheduler" version="5.1.4" targetFramework="net45" />
    </packages>

    2.使用例子

    复制代码
    using FluentScheduler;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace FluentSchedulerTest
    {
        public static class Scheduler
        {
            /// <summary>
            /// 启动定时任务
            /// </summary>
            public static void StartUp()
            {
                JobManager.Initialize(new ApiJobFactory());
            }
    
            /// <summary>
            /// 停止定时任务
            /// </summary>
            public static void Stop()
            {
                JobManager.Stop();
            }
        }
    
        /// <summary>
        /// 待处理的作业工厂,在构造函数中设置好各个Job的执行计划。
        /// 参考【https://github.com/fluentscheduler/FluentScheduler】
        /// </summary>
        internal class ApiJobFactory : Registry
        {
            public ApiJobFactory()
            {
                // 立即执行每两秒一次的计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)
                Schedule<Demo>().ToRunNow().AndEvery(2).Seconds();
    
                // 延迟一个指定时间间隔执行一次计划任务。(当然,这个间隔依然可以是秒、分、时、天、月、年等。)
                Schedule<Demo>().ToRunOnceIn(5).Seconds();
    
                // 在一个指定时间执行计划任务(最常用。这里是在每天的下午 1:10 分执行)
                Schedule(() => Trace.WriteLine("It's 1:10 PM now.")).ToRunEvery(1).Days().At(13, 10);
    
                // 立即执行一个在每月的星期一 3:00 的计划任务(可以看出来这个一个比较复杂点的时间,它意思是它也能做到!)
                Schedule<Demo>().ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0);
    
                // 在同一个计划中执行两个(多个)任务
                Schedule<Demo>().AndThen<Demo>().ToRunNow().AndEvery(5).Minutes();
            }
        }
    
        internal class Demo : IJob
        {
            void IJob.Execute()
            {
                Trace.WriteLine("开始定时任务了,现在时间是:" + DateTime.Now);
            }
        }
    }
    复制代码
  • 相关阅读:
    Android登录界面实现
    博客园自定义模板
    HttpClient + Jsoup模拟登录教务处并获取课表
    sublime编写markdown文件中Ctrl+B的作用
    Java学习路线图
    数学建模比赛论文的基本结构
    GitBash上传代码不计入贡献的问题处理
    Android知识体系图
    Java文件处理:分离全国省市县ID(数据来自和风天气)
    poj3484 Showstopper 二分
  • 原文地址:https://www.cnblogs.com/Alex80/p/7050631.html
Copyright © 2011-2022 走看看