Core基础之定时任务(一)-托管服务+Timer

时间:2025-01-31 14:09:42
using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.DependencyInjection; //IServiceProvider接口的命名空间 using XfTechOAWeb.Application.Interfaces; //应用服务接口的命名空间 namespace XfTechOAWeb.ApiServer.Background { /// <summary> /// 定时服务 /// </summary> public class TimedHostedService : BackgroundService { private readonly IServiceProvider _serviceP; private Timer _timer; //定时器 /// <summary> /// 构造方法 /// </summary> /// <param name="scopeFactory"></param> public TimedHostedService(IServiceProvider serviceP) { _serviceP = serviceP; } /// <summary> /// 执行任务 /// </summary> /// <param name="stoppingToken"></param> /// <returns></returns> protected override Task ExecuteAsync(CancellationToken stoppingToken) { _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(10*60)); //定时器创建后马上执行,每10分钟执行一次 return Task.CompletedTask; } /// <summary> /// 定时器具体执行的方法 /// </summary> /// <param name="state"></param> private void DoWork(object state) { //创建服务作用域 using(var scope = _serviceP.CreateScope()) { //IOrderService 的实现代码 略 var orderService = scope.ServiceProvider.GetRequiredService<IOrderService>(); //检查订单是否已支付,超过10分钟未支付订单自动关闭 orderService.CheckOrderPayment(); } } /// <summary> /// 释放资源 /// </summary> public override void Dispose() { _timer?.Dispose(); //如果_timer对象不为null,则销毁 base.Dispose(); } } }