首页 > 编程语言 >2步轻松实现ASP.NET Core托管服务执行定时任务

2步轻松实现ASP.NET Core托管服务执行定时任务

时间:2023-05-23 12:34:19浏览次数:40  
标签:Core ASP public 任务 NET IHostedService 定时

最近接到一个新项目,需要在项目里添加一个后台任务,定时去发邮件通知客户;由于是一个比较小型的项目,不希望引入Quartz.Net、Hangfire等太重的框架,同时也没持久化要;寻觅了一下发现ASP.NET Core本身带有托管服务,可以执行定时任务。ASP.NET Core提供了IHostedService接口,它使我们能够创建后台任务并在应用程序的生命周期中管理这些任务。使用IHostedService接口,我们可以实现在指定时间间隔内重复执行的定时任务。本文将介绍如何使用IHostedService接口实现定时任务

使用步骤

1、实现IHostedService任务接口

首先,我们需要创建一个类来实现IHostedService接口。这个类将包含我们要执行的定时任务的逻辑。下面是一个简单的示例:

public class MyTaskService : IHostedService, IDisposable
    {
        private readonly ILogger<MyTaskService> _logs;
        private Timer timer;
        public MyTaskService(ILogger<MyTaskService> logger)
        {
            this._logs=logger;
        }
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _logs.LogInformation("开始任务执行!!");
            timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
            return Task.CompletedTask;
        }
        public void DoWork(object state)
        {
            string dt = DateTime.Now.ToString();
            _logs.LogInformation("任务执行中:"+ dt.ToString()+ "!!");

        }
        public Task StopAsync(CancellationToken cancellationToken)
        {
            timer?.Change(Timeout.Infinite, 0);
            _logs.LogInformation("任务执行结束!");
            return Task.CompletedTask;
        }
        public void Dispose()
        {
            timer?.Dispose();
        }
    }
  //欢迎关注公众号:DOTNET开发跳槽,领取海量面试题。加微信号xbhpnet入群交流

简而言之,这是一个自定义服务,使用定时器每 30 秒执行一次任务。它实现了 IHostedService 和 IDisposable 接口,并使用依赖注入 ILogger 记录任务执行的开始和结束。

2、注册组件

使用定时任务需要将其注册到ASP.NET Core应用程序中,并根据需求。在Program.cs中,添加以下代码:

 builder.Services.AddHostedService<MyTaskService>();

3、执行效果

以上代码全部写完了,不需要引用任何包,很简单吧。执行效果如下:

结语

本文提供了一个简单的示例来演示如何使用IHostedService实现定时任务,并将其注册到ASP.NET Core应用程序中。大家可以根据自己使用场景来配置相应生命周期的时间间隔的定时任务。它的优点是轻量级别,使用简单;但是比较复杂的和批量的定时任务还是建议使用第三方定时任务组件,比如hangfire等主流工具。是不是很简单?希望本文对你有所收获。

来源公众号:DOTNET开发跳槽

标签:Core,ASP,public,任务,NET,IHostedService,定时
From: https://www.cnblogs.com/xbhp/p/17423239.html

相关文章

  • .NET中SQL Server数据库连接方法
    1. 使用本机上的SQLServerExpress实例上的用户实例。     用户实例的连接创建了一个新的SQLServer实例。此连接只能是在本地SQLServer2005实例上并且是通过命名管的windows验证连接才有效。目的就是为了给用户创建一个完全权限的SqlServer实例和有限的计算机管理员......
  • .net6中数据库查询报错:'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无
    错误语句:在数据库查询中使用skip()问题原因:数据库版本为SQLServer2008,不支持'Fetch'和'Next'语句SQLServer2012及后续版本才支持相关语句解决方法:1.引用包: System.Data.SqlClient和EntityFrameworkCore.UseRowNumberForPaging2.使用:在Program.cs中调整数据库连接bu......
  • .Net6自定义拦截器
    .Net6自定义拦截器拦截器是Aop(面向切面编程)的思想指的是不改变原代码封装的前提下去实现更多功能这里通过.net的特性(给一个目标对象添加一段配置信息)的方式去实现拦截器功能新建一个特性namespaceCorePolly{publicclassTestAttribute:Attribute{publ......
  • kubernetes部署Open-LDAP、Go-admin-ldap
    1.搭建openLDAP1.1.创建命名空间kubectlcreatenamespacekube-ops1.2.创建pvc存储使用的是nfs方式挂载,storageClassName为默认,所以可写可不写。mkdir-p~/ldap;cd~/ldapcat>pvc.yaml<<EOFapiVersion:v1kind:PersistentVolumeClaimmetadata:name:ldap-dat......
  • iOS MachineLearning 系列(17)—— 几个常用的对象识别 CoreML 模型
    iOSMachineLearning系列(17)——几个常用的对象识别CoreML模型上一篇文章中,我们介绍了几个官方的图片分类的模型,图片分类模型的应用场景在于将图片中最主要的事物进行识别,在已有的词库中找到最可能得事物。而对象识别则要更高级一些。再之前的文章,我们介绍过可以使用官方提供的......
  • Kubernetes 控制平面组件:etcd
    Kubernetes控制平面组件:etcd¶etcd¶Etcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。在分布式系统中,如何管理节点间的状态一直是一个难题,etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失......
  • Asp.Net MVC实现文字,链接生成二维码
    1、创建MVC项目2、添加NuGet程序包:ThoughtWorks.QRCode3、在控制器书写对应代码[HttpPost]publicActionResultEWMTest(stringtxtQRContext){stringstrContent=txtQRContext;MemoryStreamms=newMemoryStream();//生......
  • windows环境下使用Jenkins配置dotnet core极简入门
    1、环境准备1、安装Jenkins所依赖的Java环境,注意Java版本要与Jenkins要求的版本一致方法参照:Java开发环境配置|菜鸟教程(runoob.com)2、下载git工具:https://git-scm.com/download/win3、下载安装Jenkins:https://www.jenkins.io/download/jenkins的安装过程可参照:wind......
  • xiaofeng.NET系列之 netcore c#快速导出数据CSV格式 winfrom wpf
    一个导出buttonnuget搜索 usingXiaoFeng.IO;usingXiaoFeng; privatevoidbutton1_Click(objectsender,EventArgse){varsavedlg=newFolderBrowserDialog(){Description="选择保存的路径",......
  • 2..NetCore部署Linux环境搭建
    1.查考链接 https://www.cnblogs.com/wugh8726254/p/15231372.html2.https://zhuanlan.zhihu.com/p/3447148063.https://blog.csdn.net/qq_39173779/article/details/1295077924.https://blog.csdn.net/SIXGODrr/article/details/1253723385.https://zhuanlan.zhihu.com/p/59......