• [Scheduled Timer]第八回:总结


    1.目录

    [Scheduled Timer]第一回:Scheduled Timer介绍

    [Scheduled Timer]第二回:时间调度

    [Scheduled Timer]第三回:事件存储(EventStorage)

    [Scheduled Timer]第四回:事件过滤(EventFilter)

    [Scheduled Timer]第五回:任务方法(MethodCall)

    [Scheduled Timer]第六回:定时器作业(TimerJob)

    [Scheduled Timer]第七回:ScheduleTimer

    2.类图

    部分类图如下,不是全部,点击每个图片上的类图名称可以跳转到相关的介绍。

    Timer介绍,请点击 ScheduleTimer介绍,请点击 EventStory介绍,请点击 EventStory介绍,请点击 Job介绍,请点击 Job介绍,请点击 Filter介绍,请点击 Filter介绍,请点击 ScheduleTime介绍,请点击 ScheduleTime介绍,请点击 ScheduleTime介绍,请点击 Method介绍,请点击 Method介绍,请点击 Method介绍,请点击 Method介绍,请点击 Method介绍,请点击 Method介绍,请点击

    3.使用示例

    Scheduled Timer部分功能使用示例,代码中有注释。

            public static void TimerTest()
            {
                DateTime now = DateTime.Now;
                Action<string, DateTime> d = (out1, time) =>
                {
                    DateTime actual = DateTime.Now;
                    Console.WriteLine("{0} - {1} = {2} Msg:{3}", actual, time, (actual - time).TotalMilliseconds, out1);
                };
                ScheduleTimer _Timer = new ScheduleTimer();
    
                IScheduledItem item;
                //事件持久化
                _Timer.EventStorage = new FileEventStorage("time1LastTime", "http://www.cnblogs.com/TimerTaskStorage.xml");
                //清楚任务
                _Timer.ClearJobs();
                //定时器暂停
                _Timer.Stop();
    
                //2004-01-01 00:00:00 执行一次,只执行一次
                item = new SingleEvent(new DateTime(2004, 1, 1));
                _Timer.AddAsyncJob(item, d, "one");
    
                //每隔 2分钟 执行一次,循环执行
                item = new SimpleInterval(now, new TimeSpan(0, 2, 0));
                _Timer.AddAsyncJob(item, d, "cycle");
    
                //每秒钟的第6毫秒执行
                item = new ScheduledTime(EventTimeUnit.ByMinute, new TimeSpan(0, 0, 0, 0, 6));
                _Timer.AddAsyncJob(item, d, "cycle");
    
                //每分钟的第6秒执行
                item = new ScheduledTime(EventTimeUnit.ByMinute, new TimeSpan(0, 0, 6));
                _Timer.AddAsyncJob(item, d, "cycle");
    
                //每个小时的第6分钟执行
                item = new ScheduledTime(EventTimeUnit.Hourly, new TimeSpan(0, 6, 0));
                _Timer.AddAsyncJob(item, d, "cycle");
    
                //每天早上6点执行
                item = new ScheduledTime(EventTimeUnit.Daily, new TimeSpan(6, 0, 0));
                _Timer.AddAsyncJob(item, d, "cycle");
    
                //每周二早上6点执行,算法:星期天+具体时间
                item = new ScheduledTime(EventTimeUnit.Weekly, new TimeSpan(2, 6, 0, 0, 0));
                _Timer.AddAsyncJob(item, d, "cycle");
    
                //每月的3号早上6点执行,算法:每月的1号+具体时间
                item = new ScheduledTime(EventTimeUnit.Monthly, new TimeSpan(2, 6, 0, 0, 0));
                _Timer.AddAsyncJob(item, d, "cycle");
    
                //每天在 早上6点至下午5点之间每隔15分钟循环执行
                item = new Schedule.BlockWrapper(
                                                   new SimpleInterval(DateTime.Parse("1/01/2004"), TimeSpan.FromMinutes(15)),
                                                   "Daily",
                                                   "6:00 AM",
                                                   "5:00 PM");
                _Timer.AddJob(item, d, "cycle"); //异步任务
    
                //添加异常处理事件
                _Timer.Error += (object sender, ExceptionEventArgs Args) =>
                {
                    Console.WriteLine(Args.EventTime);
                    Console.WriteLine(Args.Error.Message);
                    Console.WriteLine(Args.Error.StackTrace);
                };
                //定时器启动
                _Timer.Start();
            }

    4.总结

    Scheduled Timer的介绍基本结束,Scheduled Timer向我们展示了它对定时器的封装思路和实现方法。通过对Scheduled Timer学习,自己对定时器作业的封装有了一些思路同时也学到了一些新知识点,大家想封装定时器,可以参考,下载源码。

    作者:Qlin
    出处:http://www.cnblogs.com/qqlin/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Oracle数据库用户密码设为无限期
    CentOS 7设置网卡开机自动启用
    求凹多边形的视觉中心,不是质心、重心
    autocad数据交换格式dxf读取
    gis资源站
    geotools的空间索引使用——R树和四叉树
    JTS的泰森多边形
    Geotools的delaunry三角剖分
    geotools的最短路径实现
    java多线程
  • 原文地址:https://www.cnblogs.com/qqlin/p/2695191.html
Copyright © 2020-2023  润新知