Esempio n. 1
0
        /// <summary>
        /// 执行任务
        /// </summary>
        private void Run()
        {
            int i = 0;
            int interval;

            while (true)
            {
                i++;
                //_logger.I(string.Format("{0} 开始第 {1} 次执行任务。", _mc.Name, i));
                try
                {
                    var watcher = new Stopwatch();
                    watcher.Start();
                    _mission.Action();
                    watcher.Stop();
                    //_logger.I(string.Format("{0} 第 {1} 次执行任务完毕,耗时 {2} 毫秒。", _mc.Name, i,
                    //    watcher.ElapsedMilliseconds));
                }
                catch (Exception e)
                {
                    //_logger.E(string.Format("{0} 任务执行出错 {1}。{2}", _mc.Name, this, e.Message));
                }
                interval = _mc.Interval * 60 * 1000;
                //每日 18点到次日6点之间等待时间延长至5倍
                if ((DateTime.Now.Hour < 6) || (DateTime.Now.Hour > 18))
                {
                    if (_mc.Interval >= 5)
                    {
                        interval *= 5;
                    }
                }
                if (_autoEvent.WaitOne(interval))
                {
                    //_logger.I(string.Format("{0} 任务执行了 {1} 次后被取消。", _mc.Name, i));
                    break;
                }
            }
            _autoEvent.Close();
            _autoEvent = null;
        }