有时候需要在后台定时执行一些任务,这里有两种示例:
1、BackgroundService
using Microsoft.Extensions.Hosting; using System; using System.Threading; using System.Threading.Tasks; namespace Vote.Tools { public class AccessTokenJob : BackgroundService {
//重写ExecuteAsync
protected override async Task ExecuteAsync(CancellationToken stoppingToken) {
try { while (!stoppingToken.IsCancellationRequested) {
do {
//需要执行的任务
.......
} while (string.IsNullOrEmpty(token));//token获取失败继续执行 await Task.Delay(7200000, stoppingToken); //7200秒执行一次 } } catch (Exception ex) { throw new Exception(); } } } }
并且在Startup.cs ConfigureServices方法下配置
services.AddSingleton<Microsoft.Extensions.Hosting.IHostedService, AccessTokenJob>();//第二个为工作调度的类名
2、使用Pomelo.AspNetCore.TimedJob
Nuget添加Pomelo.AspNetCore.TimedJob
Startup.cs ConfigureServices方法下配置
services.AddTimedJob();
using BLL.Manager; using BLL.Vote; using Models.Manager.Plan; using Pomelo.AspNetCore.TimedJob; using System.Collections.Generic; using System.Linq; namespace Vote.Tools { public class EmpRecordJob: Pomelo.AspNetCore.TimedJob.Job { // Begin 起始时间;Interval执行时间间隔,单位是毫秒 //SkipWhileExecuting是否等待上一个执行完成,true为等待; [Invoke(Begin = "2019-06-20 9:00", Interval = 1000 * 3600 , SkipWhileExecuting = true)] public void Run() { //需要执行的代码 } } }