• 随机定时执行任务


    间隔时间是一个随机数,可以设置间隔时间;

    可以设置最大次数;

    public class RandomTimerEngine
        {
            private System.Threading.Timer _timmer = null;
            private Action<object> _callBack = null;
            private int _minSecond = 0;
            private int _maxSecond = 0;
            private int _maxCount = 0;
            private int _curIndex = 0;
            private bool _isStop = false;
    
            public RandomTimerEngine(Action<object> callBack) : this(callBack, 0, 10)
            {
            }
            public RandomTimerEngine(Action<object> callBack, int minSecond, int maxSecond):this(callBack, minSecond, maxSecond, 0)
            {
            }
            public RandomTimerEngine(Action<object> callBack, int minSecond, int maxSecond, int maxCount)
            {
                _callBack = callBack;
                _minSecond = minSecond;
                _maxSecond = maxSecond;
                _maxCount = maxCount;
                _timmer = new System.Threading.Timer(this.TimerCallBack, null, Timeout.Infinite, Timeout.Infinite);
            }
            public void Start()
            {
                int randomSecond = this.GetRandomSeconds(_maxSecond);
                _timmer.Change(randomSecond * 1000, Timeout.Infinite);
            }
            public void Stop()
            {
                _isStop = true;
            }
    
            private void TimerCallBack(object state)
            {
                if (!_isStop)
                {
                    if (_maxCount == 0 || (_maxCount > 0 && _curIndex++ < _maxCount))
                    {
                        _callBack(state);
                        int randomSecond = this.GetRandomSeconds(_maxSecond);
                        _timmer.Change(randomSecond * 1000, Timeout.Infinite);
                    }                
                }
            }
    
            private int GetRandomSeconds(int maxSeconds = 5)
            {
                return new Random().Next(1, maxSeconds);
            }
    
    
        }

    使用:

    每隔1-5秒执行一次

    RandomTimerEngine engine = new RandomTimerEngine((state) => { MessageBox.Show("hello"); }, 0, 5);
    engine.Start();

    每隔1-5秒执行一次,最多执行10次

    RandomTimerEngine engine = new RandomTimerEngine((state) => { MessageBox.Show("hello"); }, 0, 5,10);
    engine.Start();
  • 相关阅读:
    Window10 Electron 开发环境搭建及打包exe程序
    windows 10 安装node.js
    php 电商系统SKU库存设计
    doT.js使用介绍
    ajax提交时 富文本CKEDITOR 获取不到内容
    tp5 接入腾讯对象存储COS
    redis搭建
    TP3.2.3 接入阿里sms 短信接口
    ckeditor + ckfinder + oss存储
    在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了。
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12539560.html
Copyright © 2020-2023  润新知