zoukankan      html  css  js  c++  java
  • AspNet 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:UsersAdministratorDocumentshaiwell.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!"));
                          </li>
                      </ol>
                  </div>
              </div>
              <h2 class="text-primary">第四种方式TimedJob</h2>
              <div>
                  <p>Pomelo.AspNetCore.TimedJob是一个.Net Core实现的定时任务job库,支持毫秒级定时任务</p>
                  <p>首先安装对应的包:Pomelo.AspNetCore.TimedJob</p>
                  <p>然后在Startup.cs的ConfigureServices函数里面注册服务</p>
                  <code>services.AddTimedJob();</code>
                  <p>然后在Configure中添加</p>
                  <code>app.UseTimedJob();</code>
                  <p>添加一个定时执行类,继承Job类</p>
                  <pre>
                  public class AutoGetMovieListJob:Job
                  {
                      private readonly ILogger&lt;AutoGetMovieListJob&gt; logger;
                      public AutoGetMovieListJob(ILogger&lt;AutoGetMovieListJob&gt; logger)
                      {
                          this.logger = logger;
                      }
                      /// &lt;summary&gt;
                      /// Begin 起始时间;Interval执行时间间隔,单位是毫秒
                      /// SkipWhileExecuting是否等待上一个执行完成该,true为等待
                      /// &lt;/summary&gt;
                      [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}");
                      }
                  }
                  </pre>
              </div>
          </div>
      </div>
      
  • 相关阅读:
    原生化:AnDevCon 2014 McVeigh 的主题演讲
    MVC 5 App 通过 Facebook OAuth2 登陆(Sign-on)的问题
    MVC 5 第三章 HTML Helper
    Node.js 初探
    MVC 5 第二章 项目结构
    MVC 5 第一章 起航
    新的开始
    Xcode开发如何在调试时轻松找到程序在哪里崩溃?
    100个直接可以拿来用的JavaScript实用功能代码片段(转)
    js得到当前页面的url信息方法(JS获取当前网址信息)
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/10680319.html
Copyright © 2011-2022 走看看