Core基础之定时任务(一)-托管服务+Timer
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();
}
}
}