zoukankan      html  css  js  c++  java
  • 定时任务、间隔执行任务实现

    实现一:

    static void Main(string[] args)
            {
                //实现每隔两秒钟输出一次
                var t = 0;
                var timer = new System.Timers.Timer();
                timer.Interval = 600000;//单位毫秒,这里是10分钟
                timer.Enabled = true;
                Console.WriteLine($"开始写入{DateTime.Now}");
                timer.Elapsed += (o, a) =>
                {
                    if (t == 0)
                    {
                        Console.WriteLine($"写入{DateTime.Now}");
                    }
                    else
                    {
                        //定时任务结束
                        timer.Stop();
                        timer.Enabled = false;
                    }
                };
    
                timer.Start();
                Console.Read();
            }

    实现二: 其实和实现一类似

        static protected void SetOndDayTimer()
            {
                Console.WriteLine($"我是定时任务-------{DateTime.Now}");
                System.Timers.Timer timer = new System.Timers.Timer(60000);//周期调用方法间隔时间ms
                timer.Elapsed += new System.Timers.ElapsedEventHandler(Update);//绑定事件方法
                timer.AutoReset = true;//设置一直循环调用;若设置timer.AutoReset = false;只调用一次绑定方法
                timer.Start();//开启定时器事件或者写成timer.Enabled = true;
    
            }
    
            static private void Update(object sender, ElapsedEventArgs e)
            {
                Console.WriteLine($"定时任务执行-------{DateTime.Now}");
            }

    实现三:此方法只适合在循环中使用属于间隔执行(此方法只能在60秒以内的条件且不包含60秒,超过60s,span.Seconds又从1开始计算了)

                //实现每隔两秒钟输出一次
                Console.WriteLine($"开始写入{DateTime.Now}");
                DateTime ProgramRunTime = DateTime.Now;//第一次执行的时间
                DateTime ThreadTime = DateTime.Now;//当前执行时间
                TimeSpan span = ThreadTime - ProgramRunTime;
                if (span.Seconds > 2)//每隔2秒执行一次
                {
                    Console.WriteLine($"写入{DateTime.Now}");
                }        
                Console.Read();

     实现四:

    //延迟调用
    DelayInvoke(() =>
          {
                //DO
           }, 1800);
     
    //定时调用
    RegularInvoke(() =>
          {
                //DO
           }, 1800);
    /// <summary>
            /// 延迟调用
            /// </summary>
            /// <param name="method"></param>
            /// <param name="delayTime"></param>
            public static void DelayInvoke(Action method, int delayTime = 2000)
            {
                RegularInvoke(method, delayTime, false);
            }
     
            /// <summary>
            /// 定时调用
            /// </summary>
            /// <param name="method"></param>
            /// <param name="delayTime"></param>
            /// <param name="aotoReset"></param>
            public static void RegularInvoke(Action method, int delayTime, bool aotoReset = true)
            {
                System.Timers.Timer timer = new System.Timers.Timer(delayTime);
                timer.Elapsed += new System.Timers.ElapsedEventHandler((a, b) =>
                {
                    method();
                });
                //执行一次 false
                timer.AutoReset = aotoReset;
                //是否执行System.Timers.Timer.Elapsed事件 
                timer.Enabled = true;
            }

     或者

               Console.WriteLine($"执行1{DateTime.Now}");
                Task.Factory.StartNew(() =>
                {
                    Console.WriteLine($"执行2{DateTime.Now}");
                    Task.Delay(10000).Wait();
                    Console.WriteLine($"延迟执行{DateTime.Now}");
                });          
                Console.ReadKey();
  • 相关阅读:
    windows live sync, mesh, skydrive
    忘记SQL SERVER密码的解决
    处理ObjectDataSource调用中DAL层中的异常
    C#中获取应用程序路径的方法(集合)
    datatable复制一行数据到本表
    [Yii Framework] yii中如何在查询的时候使用数据库函数
    [Yii Framework] yii的路由配置
    [Yii Framework] 已经定义的命名空间常量
    [Yii Framework] yii中关于filter
    [Yii Framework] yii中如何不加载layout
  • 原文地址:https://www.cnblogs.com/macT/p/11661571.html
Copyright © 2011-2022 走看看