簡單做個筆記,最近在ASP.NET上要設定Job,但想在固定時間執行,一直找不到範例,後來發現是我對TimeSpan類別了解不夠,仔細研究後才知道怎麼設定。

以下列的程式來說,我想設定在每天早上六點執行Job,那首先就得算出程式啟動後,距離隔天的六點還差多少時間,最後再設定週期為每天:

Task IHostedService.StartAsync(CancellationToken cancellationToken)
{
    DateTime dt = DateTime.UtcNow.AddHours(8);
    DateTime dt2 = new DateTime(dt.Year, dt.Month, dt.Day + 1, 6, 0, 0);
    TimeSpan timeSpan = dt2 - dt;

    _timer = new Timer(DoJob, null, timeSpan, TimeSpan.FromDays(1));
    return Task.CompletedTask;
}

很簡單的寫法,但在網路上找不到直接的解答,所以做個筆記。