Cách tôi thực hiện điều này là với bộ đếm thời gian.
Chạy bộ hẹn giờ máy chủ, để nó kiểm tra Giờ / phút sau mỗi 60 giây.
Nếu đó là Giờ / phút phù hợp, hãy chạy quy trình của bạn.
Tôi thực sự đã trừu tượng hóa điều này thành một lớp cơ sở mà tôi gọi là OnceADayRunner.
Hãy để tôi xóa mã một chút và tôi sẽ đăng nó ở đây.
private void OnceADayRunnerTimer_Elapsed(object sender, ElapsedEventArgs e)
{
using (NDC.Push(GetType().Name))
{
try
{
log.DebugFormat("Checking if it's time to process at: {0}", e.SignalTime);
log.DebugFormat("IsTestMode: {0}", IsTestMode);
if ((e.SignalTime.Minute == MinuteToCheck && e.SignalTime.Hour == HourToCheck) || IsTestMode)
{
log.InfoFormat("Processing at: Hour = {0} - Minute = {1}", e.SignalTime.Hour, e.SignalTime.Minute);
OnceADayTimer.Enabled = false;
OnceADayMethod();
OnceADayTimer.Enabled = true;
IsTestMode = false;
}
else
{
log.DebugFormat("Not correct time at: Hour = {0} - Minute = {1}", e.SignalTime.Hour, e.SignalTime.Minute);
}
}
catch (Exception ex)
{
OnceADayTimer.Enabled = true;
log.Error(ex.ToString());
}
OnceADayTimer.Start();
}
}
Thịt bò của phương pháp là trong kiểm tra e.SignalTime.Minute / Hour.
Có các móc trong đó để thử nghiệm, v.v. nhưng đây là những gì bộ hẹn giờ đã trôi qua của bạn có thể trông như thế nào để làm cho tất cả hoạt động.