首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# Timer 定時執行作業:從每秒到每日精確排程

     編輯:關於C#

使用 System.Timers.Timer 實作排程

System.Timers.Timer 是伺服器端常用的定時器,支援 Elapsed 事件、精確的 Interval(毫秒)、以及 AutoReset 重複觸發。下列範例示範如何在主控台應用程式中,於特定時刻(如每日 10:30:00)執行作業。

完整程式碼

using System;
using System.Timers;

namespace TimerDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Timer timer = new Timer();
            timer.Elapsed += OnTimedEvent;
            timer.Interval = 1000;      // 每秒檢查一次
            timer.Enabled = true;

            Console.WriteLine("按 Enter 鍵結束程式...");
            Console.ReadLine();
        }

        private static void OnTimedEvent(Object source, ElapsedEventArgs e)
        {
            int h = e.SignalTime.Hour;
            int m = e.SignalTime.Minute;
            int s = e.SignalTime.Second;

            // 每秒觸發
            if (s == 0) Console.WriteLine("每秒觸發一次!");

            // 每小時 30 分觸發
            if (m == 30 && s == 0) Console.WriteLine("每小時 30 分觸發!");

            // 每日 10:30:00 觸發
            if (h == 10 && m == 30 && s == 0) Console.WriteLine("每日 10:30:00 執行作業!");
        }
    }
}

關鍵點說明

  • Interval = 1000:每秒觸發 Elapsed,在事件中比對目前時間決定是否執行實際作業。
  • e.SignalTime:取得觸發瞬間的精確時間,避免使用 DateTime.Now 造成誤差。
  • 生產環境建議:若需更精確、支援排程持久化、錯誤重試、分散式鎖,請改用 Quartz.NET、Hangfire 或 Windows 工作排程器。

進階替代方案

方案適用場景
Quartz.NET複雜 Cron 運算式、叢集、持久化
Hangfire背景工作、儀表板、重試機制
HostedService (Generic Host).NET Core/5+ 內建、依賴注入友善
Windows Task Scheduler簡單排程、無程式碼部署
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved