簡體   English   中英

.Net Core 6 創建調度任務

[英].Net Core 6 Create Scheduling Task

我有一個 .Net Core 6 項目,我想在每天上午 9:00 安排一些任務。

任務調度程序的最佳方式是什么?

注意:Hangfire 是一個很好的解決方案,但它與數據庫一起使用,這對我的項目不利。

您可以使用計時器

static DateTime GetNextRunTime()
{
    DateTime now = DateTime.Now;
    if (now.Hour < 9)
    {
        // If time of the day is before 9:00 am, then job will run today at 9
        // Using this way instead of DateTime.Today.AddHours(9) because it can cause weird issues with Daylight Saving when time offset changes
        return new DateTime(now.Year, now.Month, now.Day, 9, 0, 0);
    }
    // Job will run tommorow at 9:00
    DateTime tomorrow = DateTime.Today.AddDays(1);
    return new DateTime(tomorrow .Year, tomorrow .Month, tomorrow .Day, 9, 0, 0);
}

static void ScheduleNextJob(Action action)
{
    var dueTime = GetNextRunTime() - DateTime.Now;
    
    System.Threading.Timer timer = null;
    timer = new Timer(() => 
    {
        // run your code
        try
        {
             action();
        }
        catch
        {
              // Handle the exception here, but make sure next job is scheduled if an exception is thrown by your code.
        }
        ScheduleNextJob(action); // Schedule next job
        timer?.Dispose(); // Dispose the timer for the current job
    }, null, dueTime, TimeSpan.Infinite);
}

每次我們安排作業而不是使用 24 小時周期的計時器時都創建一個新計時器的原因再次是夏令時。 在日子里,時間從夏季變為冬季,反之亦然,早上 9 點和第二天早上 9 點之間的時間差不是 24 小時。

NET 6 內置了對重復任務的支持,您可以非常輕松地構建 Windows 服務。 將其構建為 Windows 服務意味着一旦您安裝了它,您就不必擔心重新啟動,因為您可以告訴服務在重新啟動時啟動。

Checkout 使用 BackgroundService 創建 Windows 服務

.NET 中的 Worker 服務

您的總閱讀時間約為 20 分鍾,因此非常簡單。 在 Stack Overflow 答案中完全解釋有點太復雜了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM