Asp.Ner Core定时任务

AspNet Core定时任务

纪念人类首张黑洞照片发布

第一种方式BackgroundService

基于后台服务类BackgroundService实现,类所在命名空间Microsoft.Extensions.Hosting;添加定时服务类,示例如下

            public class ServerTimeA : BackgroundService
            {
                private readonly ILogger<ServerTimeA> logger;
                public ServerTimeA(ILogger<ServerTimeA> logger)
                {
                    this.logger = logger;
                }
                protected override async Task ExecuteAsync(CancellationToken stoppingToken)
                {
                    this.logger.LogInformation("StartA");
                    while (!stoppingToken.IsCancellationRequested)
                    {
                        this.logger.LogWarning("DoworkA...");
                        await Task.Delay(2000, stoppingToken);
                    }
                    this.logger.LogInformation("EndA...");
                }
            }
            public class ServerTimeB : BackgroundService
            {
                private readonly ILogger<ServerTimeB> logger;
                public ServerTimeB(ILogger<ServerTimeB> logger)
                {
                    this.logger = logger;
                }
                protected override async Task ExecuteAsync(CancellationToken stoppingToken)
                {
                    this.logger.LogInformation("StartB");
                    while (!stoppingToken.IsCancellationRequested)
                    {
                        this.logger.LogWarning("DoworkB...");
                        await Task.Delay(3000, stoppingToken);
                    }
                    this.logger.LogInformation("EndB...");
                }
            }
            

然后在Startup类中的ConfigureServices方法中添加

services.AddHostedService<ServerTimeA>();

services.AddHostedService<ServerTimeB>();

第二种方式quarzt

第三种方式Hangfire

首先安装Hangfire库

然后再Startup.cs的ConfigureServices函数里面注册服务

                    services.AddHangfire(config => {
                        //使用SQLServer持久化存储
                        config.UseSqlServerStorage(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Administrator\Documents\haiwell.mdf;Integrated Security=True;Connect Timeout=30");
                    });
                

然后再Configure中添加

                    app.UseHangfireDashboard();//启用Hangfire控制面板
                    app.UseHangfireServer();//启用Hangfire服务
                

而后就可以访问localhost:5000/Hangfire来查看面板了

  1. 基于队列的任务处理

    BackgroundJob.Enqueue(() => this.TestOne());//基于队列的任务处理
  2. 延迟任务执行

    BackgroundJob.Schedule(() => this.TestSchedule(), TimeSpan.FromSeconds(1));
  3. 循环任务执行

    RecurringJob.AddOrUpdate(() => this.TestAddOrUpdate(), Cron.Minutely());
  4. 继续在其父作业完成时执行

    string id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello")); BackgroundJob.ContinueJobWith(id, () => Console.WriteLine("World!"));

第四种方式TimedJob

Pomelo.AspNetCore.TimedJob是一个.Net Core实现的定时任务job库,支持毫秒级定时任务

首先安装对应的包:Pomelo.AspNetCore.TimedJob

然后在Startup.cs的ConfigureServices函数里面注册服务

services.AddTimedJob();

然后在Configure中添加

app.UseTimedJob();

添加一个定时执行类,继承Job类

                public class AutoGetMovieListJob:Job
                {
                    private readonly ILogger<AutoGetMovieListJob> logger;
                    public AutoGetMovieListJob(ILogger<AutoGetMovieListJob> logger)
                    {
                        this.logger = logger;
                    }
                    /// <summary>
                    /// Begin 起始时间;Interval执行时间间隔,单位是毫秒
                    /// SkipWhileExecuting是否等待上一个执行完成该,true为等待
                    /// </summary>
                    [Invoke(Begin = "2019-04-10 20:40", Interval = 1000 * 3, SkipWhileExecuting = true)]
                    public void Run()
                    {
                        this.logger.LogError($"开始执行了!{DateTime.Now}");
                    }
                    [Invoke(Begin = "2019-04-10 20:45", Interval = 1000 * 4, SkipWhileExecuting = true)]
                    public void TestA()
                    {
                        this.logger.LogError($"TestA 首张黑洞照片问世!{DateTime.Now}");
                    }
                }
                

转载于:https://www.cnblogs.com/zzr-stdio/p/10680319.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值