有時候需要在后台定時執行一些任務,這里有兩種示例:
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() { //需要執行的代碼 } } }