Как запустить. net Core IHosted Service в указанное c время суток? - PullRequest
0 голосов
/ 14 января 2020

У меня есть следующий таймер для запуска. Net core Ihosted Service,

TimeSpan ScheduledTimespan;
string[] formats = { @"hh\:mm\:ss", "hh\\:mm" };
string strTime = Startup.Configuration["AppSettings:JobStartTime"].ToString();
var success = TimeSpan.TryParseExact(strTime, formats, CultureInfo.InvariantCulture, out ScheduledTimespan);
Timer _timer = new Timer(JobToRun, null, TimeSpan.Zero, ScheduledTimespan);

Я использую эту специфическую c перегрузку,

public Timer(TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period);

Но JobToRun выполняется, как только управление достигло его. Как мне заставить его работать в определенное c время дня на ежедневной основе? Заранее спасибо.

1 Ответ

0 голосов
/ 14 января 2020

Я получил решение,

TimeSpan ScheduledTimespan;
TimeSpan TimeOftheDay = TimeSpan.Parse(DateTime.Now.TimeOfDay.ToString("hh\\:mm"));
string[] formats = { @"hh\:mm\:ss", "hh\\:mm" };
string strTime = Startup.Configuration["AppSettings:JobStartTime"].ToString();
var success = TimeSpan.TryParseExact(strTime, formats, CultureInfo.InvariantCulture, out ScheduledTimespan);

Если текущее время суток прошло время выполнения задания, Выполнить на следующий день,

TimeSpan delayTime = ScheduledTimespan >= TimeOftheDay
    ? ScheduledTimespan - TimeOftheDay    // When Scheduled Time for that day is not passed
    : new TimeSpan(24, 0, 0) - TimeOftheDay + ScheduledTimespan; // Passed - then Run Next day

_timer = new Timer(ExecuteCompleteAbsentJob, null, delayTime, new TimeSpan(24, 0, 0));
...