首页 > 编程语言 >Asp.net Core Hosted Service(托管服务) Timer (定时任务)

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

时间:2024-11-19 13:16:15浏览次数:3  
标签:Core Asp 服务 Service System Timer timer using public

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>(); //注册订单服务--有作用域的服务

标签:Core,Asp,服务,Service,System,Timer,timer,using,public
From: https://blog.csdn.net/u013400314/article/details/143872515

相关文章

  • .net core微服务 async task job示例
     Execute函数publicasyncTaskExecute(IJobExecutionContextcontext){Stopwatch_time=newStopwatch();_time.Start();stringstrRe="开始时间:"+DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");stringerrmsg=strin......
  • NetCore 3.1 大文件上传报错--413 Payload Too Large
    十年河东,十年河西,莫欺少年穷学无止境。,精益求精1、报错信息如下:RequestURL:https://xx.com/webapi/api/ad_video/UploadRequestMethod:POSTStatusCode:413PayloadTooLargeRemoteAddress:106.15.105.219:443ReferrerPolicy:strict-origin-when-cross-origin......
  • java 创建线程的三种方法(Thread,Runnable,Callable)ExecutorService
    1.继承Thread类2.实现Runnable接口3.实现Callable接口4.线程池1.继承Thread类packagecom.chen;//创建线程的方式:继承Thread,重写run(),调用start()开启线程//注意,线程开启不一定立即执行,由cpu调度执行publicclassTestThread2extendsThread{@Overridepublicvoid......
  • Android 10.0 Service启动流程分析一
    1.概述在10.0的系统rom开发中,app中对于Service的使用也是非常常见的,但是在系统framework中同样需要了解service的启动流程,看下service具体是怎么样启动的,这样就可以方便解决一些服务相关问题2.Service启动流程分析一的核心类frameworks\base\core\java\android\app\Contex......
  • C#(asp.net)文达投稿系统-毕业设计源码69552
    摘 要本论文基于C#(ASP.NET)平台,设计与实现了一个名为文达的投稿系统。该系统旨在提供一个方便、高效的投稿平台,使作者能够轻松提交和管理文章,并帮助编辑和评审人员进行有效的稿件处理。在系统设计方面,我们采用了三层架构模式,包括表示层、业务逻辑层和数据访问层。表示层......
  • 程序设计2596基于ASP.NET的滑雪网站的设计与实现【源码+讲解视频】滑雪产品租赁网站/
    项目包含:源码、讲解视频、说明文档,部署录像开发环境开发工具:VisualStudio2010或以上版本数据库:SQLServer2005或以上版本开发语言:c#操作系统:windows7或以上浏览器:GoogleChrome(推荐)、Edge、360浏览器系统用户分为:管理员、普通用户界面设计......
  • 第三十三节:基于ShardingCore框架分库、分库分表实操
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • E. MEXimize the Score
    首先观察到性质是贡献肯定是cnt[0]+min(cnt[0],cnt[1])+min(cnt[0],cnt[1],cnt[2])....这样的设状态为f[i][j],表示在选到数i时有j个数i产生了贡献的方法数转移分为两种情况,一种是数i的数量限制,一种是f[i-1][j]限制(分类非常重要那么f[i][j]对ans的贡献是包含这种选法的子序列数......
  • userService源代码
    @Slf4j@Service("userService")publicclassUserServiceImplimplementsUserService{@AutowiredprivateFinTechDataProviderServicefinTechDataProviderService;@AutowiredprivateUserConfigMapperuserConfigMapper;@AutowiredprivateUserDepart......
  • 【ARM CoreLink 系列 1 -- SoC 架构 总线 互联(interconnect) 介绍】
    概述在摩尔定律的推动下,集成电路工艺取得了高速发展,单位面积上的晶体管数量不断增加。片上系统(System-on-Chip,SoC)具有集成度高、功耗低、成本低等优势,已经成为大规模集成电路系统设计的主流方向,解决了通信、图像、计算、消费电子等领域的众多挑战性的难题。随着片上系统SoC的应......