当前位置: 首页 > article >正文

Asp.net Core Hosted Service(托管服务) Timer (定时任务)

Hosted Service 托管服务 要继承 IHostedService 或继承 BackgroundService

在这里插入图片描述
在这里插入图片描述
》》》定义一个后台托管服务

/// <summary>
/// 自定义后台任务类
/// </summary>
public class MyHostedService : BackgroundService
{
    /// <summary>
    /// 执行任务
    /// </summary>
    /// <param name="stoppingToken"></param>
    /// <returns></returns>
    protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        int i = 1;
 		//如果没停止,就一直执行
        while (!stoppingToken.IsCancellationRequested)
        {
            DoWork(i++);
        }

        return Task.CompletedTask;
    }

    /// <summary>
    /// 打印输出一句话
    /// </summary>
    /// <param name="i"></param>
    private void DoWork(int i)
    {
        Console.WriteLine("后台任务执行MyHostedService,第{0}次", i);
    }
}

》》》注册服务

//.NET6中的Program.cs中注册后台任务
builder.Services.AddHostedService<MyHostedService>(); 

Timer System.Threading.Timer是一个非常常用的定时器类,是一个使用回调方法的计时器,而且由线程池线程服务,简单且对资源要求不高。

core 中的 timer 跟 Window Form 中的 timer 不一样
window Form timer 命名空间 System.Windows.Forms
在这里插入图片描述

//以下演示如何使用Timer类
using System;
using System.Threading;

public class TestTimer
{
    /// <summary>
    /// 定时器
    /// </summary>
    private Timer _iTimer;
    /// <summary>
    /// 构造方法
    /// </summary>
    public TestTimer()
    {
        _iTimer = new Timer(Doing,null,TimeSpan.Zero, TimeSpan.FromMinutes(5));
    }
    /// <summary>
    /// 执行具体定定时任务
    /// </summary>
    /// <param name="nObject"></param>
    public void Doing(object nObject)
    {
        //具体代码。。
    }
}

托管服务 + 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();
        }
    }
}

》》》创建服务》》》


builder.Services.AddHostedService<TimedHostedService>();   //注册托管服务--定时任务
builder.Services.AddScoped<IOrderService, OrderService>(); //注册订单服务--有作用域的服务


http://www.kler.cn/a/403253.html

相关文章:

  • 【Python TensorFlow】进阶指南(续篇三)
  • 六大核心应用场景,解锁AI检测系统的智能安全之道
  • NVR录像机汇聚管理EasyNVR大华NVR管理平台:深耕视频监控市场的多元化兼容
  • C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)
  • 【PDFBox】-初识
  • 大模型时代的具身智能系列专题(十三)
  • 汇编中的异常处理
  • ESP32桌面天气摆件加文心一言AI大模型对话Mixly图形化编程STEAM创客教育
  • 基于Amazon Bedrock:一站式多模态数据处理新体验
  • 大模型呼叫中心是什么?
  • maven父子项目
  • Selenium的八种定位方式
  • c++ 栈
  • 常见大语言模型解析:技术细节、应用与挑战
  • 基于Java Springboot音乐播放器系统
  • 手撸 chatgpt 大模型:详解 OpenAI 训练 gpt3 模型时使用的数据预处理算法:BPE
  • IDEA怎么定位java类所用maven依赖版本及引用位置
  • 自动化生成边界测试和极端情况测试用例
  • 如何用专线网络搭建亚马逊美国站
  • python基础之学生成绩管理系统
  • 编译安装 openssl-3.0.14
  • Hive分桶超详细!!!
  • vulfocus在线靶场:CVE-2018-7600 速通手册
  • STL序列式容器之slist
  • jenkins的安装(War包安装)
  • Python学习------第十天