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 執行作業!");
}
}
}
Elapsed,在事件中比對目前時間決定是否執行實際作業。DateTime.Now 造成誤差。| 方案 | 適用場景 |
|---|---|
| Quartz.NET | 複雜 Cron 運算式、叢集、持久化 |
| Hangfire | 背景工作、儀表板、重試機制 |
| HostedService (Generic Host) | .NET Core/5+ 內建、依賴注入友善 |
| Windows Task Scheduler | 簡單排程、無程式碼部署 |