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();
  • 相关阅读:
    Rotation Kinematics
    离职 mark
    PnP 问题方程怎么列?
    DSO windowed optimization 代码 (4)
    Adjoint of SE(3)
    IMU 预积分推导
    DSO windowed optimization 代码 (3)
    DSO windowed optimization 代码 (2)
    OKVIS 代码框架
    DSO windowed optimization 代码 (1)
  • 原文地址:https://www.cnblogs.com/macT/p/11661571.html
Copyright © 2011-2022 走看看