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>
      
  • 相关阅读:
    maya粒子生成曲线
    jcFeather 1.5 视频教程系列
    maya 粒子制作海洋岸边convected foam
    maya curveflow修改
    jcFeather 免费限制版本
    欢迎
    用Maya切菜
    easyui 个人使用心得之下拉列表
    SQlServer时间的操作
    数字形式的人民币转换为大写形式
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/10680319.html
Copyright © 2011-2022 走看看