zoukankan      html  css  js  c++  java
  • 随机定时执行任务

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

    可以设置最大次数;

    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();
  • 相关阅读:
    测试用例编写(功能测试框架)
    OKR与KPI管理的区别与联系
    手机测试常见的BUG解析
    软件测试之BUG分析定位概述(QA如何分析定位BUG)【转自 https://blog.csdn.net/kaka1121/article/details/51538979】
    KPI、KPA、OKR三者的区别
    swagger api 文档框架
    Jmeter + Ant + Jenkins 接口/性能测试,持续集成环境搭建
    重建词汇精神家园
    记忆的本质
    attention机制七搞八搞
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12539560.html
Copyright © 2011-2022 走看看