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類型。

第二個參數表示:永不過期。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM