.NET Core 基于 IHostedService 实现后台定时任务

.NET Core 基于 IHostedService 实现后台定时任务

迷恋自留地

NET Core 2.0 引入了 IHostedService ,基于它可以很方便地执行后台任务,.NET Core 2.1 则锦上添花地提供了 IHostedService 的默认实现基类 BackgroundService ,在这篇随笔中分别用 Web 与 Console 程序体验一下。

第一步:首先继承 BackgroundService 实现一个 TimedBackgroundService

 class TimedBackgroundService : BackgroundService
    {
        private readonly ILogger _logger;
        private Timer _timer;

        public TimedBackgroundService(ILogger<TimedBackgroundService> logger)
        {
            _logger = logger;
        }

        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
            return Task.CompletedTask;
        }

        private void DoWork(object state)
        {
            _logger.LogInformation($"Hello World! - {DateTime.Now}");
        }

        public override void Dispose()
        {
            base.Dispose();
            _timer?.Dispose();
        }

    }

第二步:在 ASP.NET Core Web 程序中执行这个后台定时任务只需在 Startup 的 ConfigureServices 注册 TimedBackgroundService 即可:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHostedService<TimedBackgroundService>();
}

简单Demo使用

创建TaskAndOrderService 类,继承 : BackgroundService ,实现接口

/// <summary>
    /// 任务订单处理自动开始结束
    /// </summary>
    public class TaskAndOrderService : BackgroundService
    {

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
           
            while (!stoppingToken.IsCancellationRequested)
            {
                 //doto (处理业务)
                 Console.WriteLine($"{DateTime.Now}-你好");
           
                await Task.Delay(5000, stoppingToken);
            }
        }

    }

然后在server中注册

 //设置任务自动开始后者任务结束
            services.AddHostedService<TaskAndOrderService>();


我的公众号

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在.NET Core Web API中实现定时任务,您可以使用Hangfire库来实现。以下是一些步骤: 1. 首先,您需要在您的.NET Core Web API项目中安装Hangfire库。可以使用NuGet包管理器或通过命令行运行以下命令来安装Hangfire: ``` dotnet add package Hangfire ``` 2. 在您的Startup.cs文件中,添加Hangfire的配置。在`ConfigureServices`方法中,添加以下代码: ```csharp services.AddHangfire(config => config.UseSqlServerStorage("<your_connection_string>")); ``` 请确保将`<your_connection_string>`替换为您的SQL Server连接字符串。 3. 接下来,在`Configure`方法中,添加以下代码来配置Hangfire的面板: ```csharp app.UseHangfireDashboard(); ``` 这将允许您在浏览器中访问Hangfire的仪表板。 4. 现在,您可以创建一个定时任务了。在您的Controller或Service类中,创建一个方法来执行您的任务。例如,以下是一个执行定时任务的示例方法: ```csharp public void MyScheduledTask() { // 执行您的任务逻辑 } ``` 5. 最后,在您的Controller或Service类中,创建一个方法来调度定时任务。您可以使用Hangfire的`RecurringJob`类来实现。例如,以下是一个将定时任务调度为每分钟执行一次的示例方法: ```csharp public void ScheduleTask() { RecurringJob.AddOrUpdate(() => MyScheduledTask(), Cron.MinuteInterval(1)); } ``` 这将使用Hangfire来调度`MyScheduledTask`方法,使其每分钟执行一次。 现在,您的.NET Core Web API中的定时任务已经配置完毕。您可以通过调用`ScheduleTask`方法来启动定时任务。 注意:请确保您的应用程序保持运行状态,以便Hangfire能够按计划执行定时任务。您可以使用一些方法来保持应用程序的活动状态,例如使用Kestrel服务器或部署到常驻主机。 希望这些步骤对您有帮助!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值