首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将.Netcore IHostedService作为控制台应用程序关闭

将.Net Core IHostedService作为控制台应用程序关闭是指在使用.Net Core开发控制台应用程序时,使用IHostedService接口来管理应用程序的生命周期,并在应用程序关闭时执行一些清理操作。

IHostedService是一个接口,用于定义一个可托管的服务,它可以在应用程序的启动和关闭过程中执行一些任务。通过实现IHostedService接口,我们可以在应用程序启动时执行一些初始化操作,并在应用程序关闭时执行一些清理操作。

要将.Net Core IHostedService作为控制台应用程序关闭,可以按照以下步骤进行操作:

  1. 创建一个实现了IHostedService接口的类,例如名为MyHostedService的类。
  2. 在MyHostedService类中实现StartAsync方法,用于在应用程序启动时执行一些初始化操作。
  3. 在MyHostedService类中实现StopAsync方法,用于在应用程序关闭时执行一些清理操作。
  4. 在控制台应用程序的入口点Main方法中,创建一个WebHostBuilder对象,并将MyHostedService添加到服务容器中。
  5. 调用Build方法来构建WebHost,并调用Run方法来启动应用程序。

以下是一个示例代码:

代码语言:txt
复制
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;

public class MyHostedService : IHostedService
{
    public Task StartAsync(CancellationToken cancellationToken)
    {
        // 在应用程序启动时执行一些初始化操作
        Console.WriteLine("应用程序已启动");
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        // 在应用程序关闭时执行一些清理操作
        Console.WriteLine("应用程序正在关闭");
        return Task.CompletedTask;
    }
}

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = new HostBuilder()
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<MyHostedService>();
            })
            .Build();

        await host.RunAsync();
    }
}

在上述示例中,MyHostedService类实现了IHostedService接口,并在StartAsync方法中输出应用程序已启动的消息,在StopAsync方法中输出应用程序正在关闭的消息。在Main方法中,将MyHostedService添加到服务容器中,并通过调用host.RunAsync方法来启动应用程序。

这样,当控制台应用程序启动时,会执行MyHostedService的StartAsync方法中的初始化操作;当应用程序关闭时,会执行MyHostedService的StopAsync方法中的清理操作。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云视频处理服务:https://cloud.tencent.com/product/vod
  • 腾讯云音视频通信(TRTC):https://cloud.tencent.com/product/trtc
  • 腾讯云云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云原生数据库TDSQL:https://cloud.tencent.com/product/tdsql
  • 腾讯云云原生数据仓库(CDW):https://cloud.tencent.com/product/cdw
  • 腾讯云云原生日志服务(CLS):https://cloud.tencent.com/product/cls
  • 腾讯云云原生函数计算(SCF):https://cloud.tencent.com/product/scf
  • 腾讯云云原生消息队列(CMQ):https://cloud.tencent.com/product/cmq
  • 腾讯云云原生容器服务(TCS):https://cloud.tencent.com/product/tke
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NetCore使用托管服务执行后台任务

## 关于我 [作者博客|文章首发](http://www.zhouhuibo.club) 我们经常要使用NetCore控制台或者AspNetCore来定义一些通用的后台服务。...既然NetCore现在的稳定版本都已经是3.1了,难道官方没有考虑到这种最基本的使用场景吗。当然不会,下面我们就本着参考官方文档的角度解析一下后台服务在Core控制台中的使用。...在 `StopAsync` 上禁用计时器,并在 `Dispose` 上处置服务容器时处置计时器: 继承`IHostedService`接口,实现`StartAsync`和`StopAsync`方法即可将服务正常注入后台任务中...`IDisposable`的作用主要是在进程关闭时释放定时器资源 ``` public class TimedHostedService : IHostedService, IDisposable {...使用方法和控制台一致。

1.2K10

【半译】扩展shutdown超时设置以保证IHostedService正常关闭

我最近发现一个问题,当应用程序关闭时,我们的应用程序没有正确执行在IHostedService中的StopAsync方法。经过反复验证发现,这是由于某些服务对关闭信号做出响应所需的时间太长导致的。...StopAsync当应用程序收到shutdown(SIGTERM)信号时(例如,您CTRL+C在控制台窗口中按入,或者应用程序被主机系统停止时),调用。...我们IHostedServices作为每个Kafka消费者的主机。具体操作并不重要-关键在于关闭IHostedService相对较慢:取消订阅可能需要几秒钟。...这意味着5秒后放弃托管服务关闭- IHostedService必须在此超时内关闭所有托管服务。...摘要 在这篇文章中,我讨论了一个最近发现的问题,该问题是当应用程序关闭时,我们的应用程序未在IHostedService实现中的StopAsync中运行该方法。

1.2K31
  • 服务承载系统:总体设计

    作为宿主的IHost对象被启动的时候,它会利用依赖注入框架激活每个注册的IHostedService服务,并通过调用StartAsync方法来启动它们。...当服务承载应用程序关闭的时候,作为服务宿主的IHost对象会被关闭,由它承载的每个IHostedService服务对象的StopAsync方法也随之被调用。...一般来说,一个服务承载应用在整个生命周期内只会创建一个IHost对象,我们启动和关闭应用程序本质上就是启动和关闭作为宿主的IHost对象。...我们在一个控制台应用程序中定义了如下这个承载服务FakeHostedService。...在得到其三个属性返回的CancellationToken对象之后,我们在它们上面分别注册了一个回调,回调操作通过在控制台上输出相应的文字使我们可以知道应用程序何时被启动和关闭

    77850

    NetCore中的IHostedService

    虽然本次提及的内容是.NET Core通用,但将以AspNet Core为例作为介绍。 正文 咱们开发应用的时候,有时候可能需要建立一些独立于应用逻辑体本身的后台任务。...从.NetCore 3.x 之后,当大家创建一个新的AspNetCore应用的时候,打开默认的 Program.cs 文件,就会发现它和以往的版本已经不一样了。...这就告诉我们,.NET Core进行了更高层次的抽象,也就意味着现在能支持更多不同托管主机的创建方式,未来也支持更多的类型。果然是一盘很大的棋啊? 回到今天的主题 IHostedService 。...接口为在 ASP.NET Core Web 应用程序(在 .NET Core 2.0 及更高版本中)或任何进程/主机(从使用 IHost 的 .NET Core 2.1 开始)中启动后台任务提供了一种便捷方式...其主要优势在于,当主机本身将要关闭时,可以有机会进行正常取消以清理后台任务的代码。 其实关于后台定时任务,您可能会想到一些成熟的框架,比如Hangfire等。

    1.6K20

    【.net core】电商平台升级之微服务架构应用实战

    3.1 微服务的优势 使大型的复杂应用程序可以持续交付和持续部署:持续交付和持续部署是DevOps的一部分,DevOps是一套快速、频繁、可靠的软件交付实践。...开发者需要思考到底应该在应用的什么阶段使用微服务架构:使用微服务架构的另一个问题是决定在应用程序生命周期的哪个阶段开始使用这种架构。...订单微服务 我们用vs2019 创建控制台应用程序 选择框架.Net Core 3.1 命名为Jlion.NetCore.OrderService 后面简称订单服务,创建完后我们通过nuget包引入...百度网盘下载地址如下: 链接: https://pan.baidu.com/s/1twpmA4_aErrsg-m0ICmOPw 提取码: cshs 如果通过下载后安装不是vs 集成安装方式,下载完成后需要关闭...服务引用Jlion.NetCore.OrderService.Grpc 类库 订单服务中 实现自己的IHostedService 创建HostService类,继承IHostedService代码如下

    93120

    NetCore的缓存使用详例

    关于我 作者博客|文章首发 缓存基础知识 缓存可以减少生成内容所需的工作,从而显著提高应用程序的性能和可伸缩性。 缓存最适用于不经常更改的 数据,生成 成本很高。...内存中和分布式缓存缓存项作为键值对。 缓存指南 代码应始终具有回退选项,以获取数据,而 不是依赖于可用的缓存值。 缓存使用稀有资源内存,限制缓存增长: 不要 使用外部 输入作为缓存键。...使用 DI注入 创建一个NetCore控制台项目,进行缓存的项目演示。 控制台项目只有一个初始化的Program.cs文件。...基于NetCore进行项目编码,每一步就是创建一个基础模板,使用依赖注入的方式。...}); ​ await builder.RunConsoleAsync(); } } 后台服务 public class BackgroundJob : IHostedService

    71720

    服务承载系统: 承载服务启动流程

    应用程序关闭之前,控制台上还会出现一条内容为“Application is shutting down...”的日志。上述这四条日志在控制台上输出额效果体现在下图中。 ?...除了以日志的形式输出与当前承载应用程序相关的状态信息之外,针对Cancel按键(Ctrl + C)的捕捉以及随后关闭当前应用的功能也实现在ConsoleLifetime类型中。...于此同时,ConsoleLifetime对象还会注册控制台的按键事件,其目的在于确保在用户按下取消组合键(Ctrl + C)后应用能够被正常关闭。...有一点需要着重指出:代表承载服务的所有IHostedService对象是“逐个(不是并发)”被启动的,而且只有等待所有承载服务全部被启动之后,我们的应用程序才算成功启动了。...当Host对象的StopAsync方法被调用的时候,它会调用ApplicationLifetime对象的StopApplication方法对外发出应用程序即将被关闭的通知,此后它会调用每个IHostedService

    1.3K60

    NetCore服务虚拟化01(集群组件Overt.Core.Grpc)

    起始 去年.NetCore2.0的发布,公司决定新项目采用.NetCore开发,当作试验。...另外一点公司本身是做电商服务的,很多东西依赖了阿里的数据,阿里要求数据不能够出聚石塔,我们所有相关的应用迁移到了聚石塔,随之问题也来了,聚石塔只开放了80端口,这么多的Thrift服务需要开放端口,机房与聚石塔之间的交互就很头疼了...经过一段时间的调研,决定采用grpc作为新的RPC服务框架,原因有以下几点: (1)支持多语言 (2)支持http/2,80端口可用 但是grpc需要做集群支持,也经过一段时间的研究,决定抛弃zookeeper...,采用consul来作为注册中心,至于原因,有很多方面。...配置信息 (1)服务端配置信息 (NetCore / Framework) NetCore配置案例 appsettings.json { "GrpcServer": { "Service":

    37930

    Asp.net Core 2.1新功能Generic Host(通用主机)深度学习

    在未来的版本中,通用主机适用于托管任何类型的应用,包括 Web 应用。...通用主机,让我可以用编写Asp.Net Core的思想(例如控制反转、依赖注入、IOC容器)来简化控制台应用程序的创建(个人见解),主机负责程序的启动和生存周期的管理,这对于不处理HTTP请求的应用程序非常有用...(处理HTTP请求的是Web应用程序,用Web Host托管),通用主机的目标是HTTP管道从Web Host中脱离出来,使得Asp.Net Core的那套东西也适用于其他.Net Core程序。...所以,一旦日志记录了内容,该内容就会在控制台中输出。...) await builder.RunConsoleAsync(); //在控制台应用程序中运行通用主机 } 黄色部分,把实现了IHostedService

    1.4K20

    小逗逼的连载-7.NetCore的缓存使用详例

    缓存可以减少生成内容所需的工作,从而显著提高应用程序的性能和可伸缩性。 缓存最适用于不经常更改的 数据,生成 成本很高。 通过缓存,可以比从数据源返回的数据的副本速度快得多。...内存中和分布式缓存缓存项作为键值对。 缓存指南 代码应始终具有回退选项,以获取数据,而 不是依赖于可用的缓存值。 缓存使用稀有资源内存,限制缓存增长: 不要 使用外部 输入作为缓存键。...使用 DI注入 创建一个NetCore控制台项目,进行缓存的项目演示。 控制台项目只有一个初始化的Program.cs文件。...基于NetCore进行项目编码,每一步就是创建一个基础模板,使用依赖注入的方式。...}); await builder.RunConsoleAsync(); } } 后台服务 public class BackgroundJob : IHostedService

    40100

    ASP.NET Core 6框架揭秘实例演示:如何承载你的后台服务

    借助 .NET提供的服务承载(Hosting)系统,我们可以一个或者多个长时间运行的后台服务寄宿或者承载我们创建的应用中。...我们在一个控制台应用程序中定义了如下这个承载服务类型FakeHostedService,并在其构造函数中注入了IHostApplicationLifetime服务。...Task.CompletedTask; } } 在实现的StartAsync方法中,我们采用如上的方式在等待5秒之后调用IHostApplicationLifetime对象的StopApplication方法关闭应用程序...1所示,从三条消息输出的时间间隔可以确定当前应用程序正是承载FakeHostedService通过调用IHostApplicationLifetime服务的StopApplication方法关闭的。...图1 调用IHostApplicationLifetime服务关闭应用程序 [S1408]与第三方依赖注入框架的整合 《一个Mini版的依赖注入框架》中创建了一个名为Cat的简易版依赖注入框架,并在《与第三方依赖注入框架

    70420

    ASP.NET Core 6框架揭秘实例演示:如何承载你的后台服务

    接口表示,该接口定义的StartAsync和StopAsync方法可以启动与关闭服务。...在调用Build方法构建IHost对象之前,我们调用了ConfigureServices方法PerformancceMetricsCollector注册成针对IHostedService接口的服务,并将生命周期模式设置成...在实现的DeliverAsync方法中,我们采用的传输协议和目标地址输出到控制台上。...对于我们的演示实例来说,用于发送性能指标的MetricsDeliverer对象会将收集的指标数据输出到控制台上,下面这段文字以日志的形式进行输出,为此我们这个类型进行了如下的修改。...图5 日志输出到控制台上 [S1406]在配置中定义日志过滤规则 如果需要对输出的日志进行过滤,可以将过滤规则定义在配置文件中。

    44510

    服务承载系统: 承载长时间运行的服务

    在实现的DeliverAsync方法中,可以采用的传输协议和目标地址输出到控制台上。...由于演示的应用程序采用的SDK类型为“Microsoft.NET.Sdk”,程序运行过程中会将编译程序集的目标目录作为当前目录,所以需要将配置文件的“Copy to output directory”属性设置为...对于演示实例来说,它用于发送性能指标的FakeMetricsDeliverer对象会将收集的指标数据输出到控制台上,下面这段文字以日志的形式进行输出,为此我们这个类型进行了如下改写。...为了日志框架引入应用程序,我们需要在初始化应用时注册相应的服务,为此需要将应用程序做相应的改写。...我们这个配置节作为参数调用ILoggingBuilder对象的AddConfiguration扩展方法承载的过滤规则应用到日志框架上。

    54460

    Asp.net Core 2.1新功能Generic Host(通用主机)深度学习

    在未来的版本中,通用主机适用于托管任何类型的应用,包括 Web 应用。...通用主机,让我可以用编写Asp.Net Core的思想(例如控制反转、依赖注入、IOC容器)来简化控制台应用程序的创建(个人见解),主机负责程序的启动和生存周期的管理,这对于不处理HTTP请求的应用程序非常有用...(处理HTTP请求的是Web应用程序,用Web Host托管),通用主机的目标是HTTP管道从Web Host中脱离出来,使得Asp.Net Core的那套东西也适用于其他.Net Core程序。...可以看到,这简直就是一个精简版的Asp.Net Core应用程序,对这个Main函数中出现的所有方法,大家对Asp.Net Core Web应用程序比较熟悉,所以我与Asp.net core 的Webhost...所以,一旦日志记录了内容,该内容就会在控制台中输出。

    1.1K10

    利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务「建议收藏」

    但是ASP.NET Core虽然是控制台程序,但是它本身是使用了含有HTTP管道的Web Host来负责应用程序的生命周期管理,用它来作为定时任务的话,会有很多不必要的工作负载,例如占用端口、增加了很多依赖等等...它才是作为纯粹定时任务程序的最佳拍档。 但是由于Generic Host本身非常简单,用它运行的程序设置在注册为Windows服务启动之后会自动停止。...CancellationToken cancellationToken) { return Task.CompletedTask; } } 然后实现IHostedService...internal class FileWriterService : IHostedService, IDisposable { private static string path...查看输出文件,可以看到定时写入成功,服务也一直没关闭~ 示例代码 https://github.com/ElderJames/GenericHostWindowsServiceWithTopshelf

    57320

    在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

    在这篇文章中,我介绍如何使用ASP.NET Core托管服务运行Quartz.NET作业。这样的好处是我们可以在应用程序启动和停止时很方便的来控制我们的Job的运行状态。...接下来我演示如何创建一个简单的 IJob,一个自定义的 IJobFactory和一个在应用程序运行时就开始运行的QuartzHostedService。...(IApplicationBuilder app, IWebHostEnvironment env) { ...... } } } 此代码四个内容作为单例添加到...当应用程序关闭时,框架调用StopAsync(),此时您可以调用Scheduler.Stop()以安全地关闭调度程序进程。...services.AddHostedService(); } 如果运行该应用程序,则应该看到每隔5秒运行一次后台任务并写入控制台中(或配置日志记录的任何地方)

    2.9K20

    一张图理清ASP.NET Core启动流程

    引言 对于ASP.NET Core应用程序来说,我们要记住非常重要的一点是:其本质上是一个独立的控制台应用,它并不是必需在IIS内部托管且并不需要IIS来启动运行(而这正是ASP.NET Core跨平台的基石...从上图中我们可以看出CreateDefaultBuilder()方法主要干了六件大事: UseKestrel:使用Kestrel作为Web server。...默认为当前应用程序根目录。 ConfigureAppConfiguration:设置当前应用程序配置。...在创建宿主构造器IWebHostBuilder时我们通过调用UseKestrel()方法指定了使用KestrelServer作为默认的IServer实现。...启动IHostedService IHostedService接口用来定义后台任务,通过实现该接口并注册到Ioc容器中,它会随着ASP.NET Core 程序启动而启动,终止而终止。 5.

    2.1K70

    如何在ASP.NET Core中使用SignalR构建与Angular通信的实时通信应用程序

    图片 假设我们要创建一个监视Web应用程序,该应用程序为用户提供了一个能够显示一系列信息的仪表板,这些信息会随着时间的推移而更新。...作为参数发送的对象将使用适当的协议反序列化。客户端在页面代码中搜索与名称相对应的方法,如果找到该名称,则将其调用并传递反序列化的数据作为参数。...在ASP.NET Core中,我们可以使用框架提供的IHostedService接口在.NET Core应用程序中在后台实现进程的执行。方法要实现是StartAsync()和StopAsync() 。...非常简单:StartAsync调用到主机启动,而StopAsync调用到主机关闭。 然后,我们一个类DashboardHostedService添加到项目中,该类实现 IHostedService。...getMessage,该函数将来自后端的消息作为参数。

    2.1K20
    领券