Bunu başarma şeklim bir zamanlayıcı ile.
Bir sunucu zamanlayıcı çalıştırın, her 60 saniyede bir Saati / Dakikayı kontrol etmesini sağlayın.
Doğru Saat / Dakika ise, işleminizi çalıştırın.
Aslında bunu OnceADayRunner olarak adlandırdığım bir temel sınıfa soyutladım.
Kodu biraz temizleyeyim ve buraya göndereceğim.
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();
}
}
Yöntemin sığır eti e.SinyalSüresi Dakika / Saat kontrolündedir.
Orada test vb. İçin kancalar var, ancak bu, tümünün çalışmasını sağlamak için geçen zamanlayıcınız gibi görünebilir.