• c# Timer按月执行任务


    直接贴代码:

            /// <summary>
            /// 每月导出
            /// </summary>
            private void ExportMonthExcel()
            {
                int t = 0;//以此变量控制第一次不执行
                _monthTimer = new System.Threading.Timer(execute, null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);
                _monthTimer.Change(TimeSpan.Zero, Timeout.InfiniteTimeSpan);
    
                void execute(object dateTime)
                {
                    //下个月1号早上7:30
                    var executeTime = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date.AddMonths(1).AddHours(7.5);
                    //调试模式下,第一次访问设置下次执行时间
                    if (ConfigHelper.Debug)
                    {
                        if (t == 0)
                        {
                            executeTime = DateTime.Now.AddSeconds(3);
                        }
                    }
    
                    if (t > 0)
                    {
                        try
                        {
                            var columns = this._anomateexcelService.GetAll();
                            _monthdYTrackANODetail700013TodayService.ExportMonthToExcel(columns, executeTime);
                        }
                        catch (Exception ex)
                        {
                            _logger.Error($"每月导出excel任务失败,message:{ex.Message},stackTrace:{ex.StackTrace}");
                        }
                    }
    
                    //执行完后,重新设置定时器下次执行时间.
                    _monthTimer.Change(executeTime.Subtract(DateTime.Now), Timeout.InfiniteTimeSpan);
                    t++;
                }
            }

    主要用到了Timer类的Change方法。

    第一个参数表示:到下次执行需要的时间。为TimeSpan类型。

    第二个参数表示:永不过期。

  • 相关阅读:
    testDecoration
    python装饰器详解
    开闭原则, 对扩展开放、对修改关闭
    使用元类 编写ORM
    Python 实现累加计数的几种方法
    python 查找目录下 文件名中含有某字符串的文件
    android应用程序的混淆打包规范
    自定义Tabs
    android-Service
    Loader异步装载器
  • 原文地址:https://www.cnblogs.com/subendong/p/12106493.html
Copyright © 2020-2023  润新知