实现一:

 

 

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();

 

posted on 2019-10-12 14:53  红磨坊后的白桦树  阅读(647)  评论(0编辑  收藏  举报