首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net核心6创建调度任务

.Net核心6创建调度任务
EN

Stack Overflow用户
提问于 2022-05-25 07:17:26
回答 2查看 3.3K关注 0票数 1

我有一个.Net核心6项目,我想安排一些每天上午9点工作的任务。

任务调度程序的最佳方式是什么?

注意: Hangfire是一个很好的解决方案,但是它与DataBase一起工作,这对我的项目是不好的。

EN

回答 2

Stack Overflow用户

发布于 2022-05-25 07:41:54

您可以使用定时器

代码语言:javascript
复制
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小时。

票数 0
EN

Stack Overflow用户

发布于 2022-06-04 14:29:30

NET 6支持反复出现的任务,您可以很容易地构建一个windows服务。将其构建为windows服务意味着一旦安装了它,就不必担心重新启动,因为您可以告诉服务在重新启动时启动。

结帐使用BackgroundService创建Windows

.NET中的员工服务

你的总阅读时间大约是20分钟,所以它是相当直接的。在堆栈溢出的回答中解释起来有点过于复杂了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72373372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档