.NET Core基于Generic Host实现后台任务方法教程
介绍关于.NET Core基于Generic Host实现后台任务的相关资料,这是一个具有技术性的主题,对于开发者来说具有很高的学习和参考价值。随着.NET Core技术的不断发展和普及,后台任务的处理方式也在不断进步,Generic Host便是其中一种重要的解决方案。
一、前言
在软件开发中,后台任务扮演着非常重要的角色。它们默默地处理各种任务,支持前台应用程序的运行。在.NET Framework时代,后台任务通常通过Windows服务来实现。而在.NET Core时代,我们有更多的选择,其中Generic Host便是其中一种非常实用的方案。
二、什么是Generic Host
Generic Host是ASP.NET Core 2.1中的新功能,它的设计初衷是将HTTP管道从Web Host的API中分离出来,从而支持更多的Host方案。在.NET Core中,有两种主要的Host类型:一种是用于托管Web程序的Host,另一种就是Generic Host,适用于托管非Web应用,如后台任务。
Generic Host具有通用性,既可以在Web项目中使用,也可以在非Web项目中使用。这使得我们可以更灵活地运用Generic Host的特性,如配置、依赖注入和日志等。
三、后台任务示例
接下来,我们通过两个示例来展示如何使用Generic Host创建后台任务。
1. 一直运行的后台任务
这类任务类似于消息队列的消费者或RPC的服务端,需要不停地运行以处理请求。我们可以创建一个继承自BackgroundService的类来实现这个后台任务。
示例代码:
```csharp
public class MyLongRunningTask : BackgroundService
{
private readonly ILogger
public MyLongRunningTask(ILogger
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
// 执行任务逻辑
_logger.LogInformation("Long running task is running.");
await Task.Delay(TimeSpan.FromSeconds(1)); // 每隔一秒执行一次
}
}
}
```
2. 定时运行的后台任务
这类任务需要按照设定的时间间隔或时间表来运行。我们可以使用IHostedService接口和Timer类来实现定时任务。在Generic Host中,我们可以直接注入IHostLifetime来停止主机,从而实现定时任务的优雅关闭。
示例代码:
```csharp
public class MyTimedBackgroundTask : IHostedService, IDisposable
{
private readonly ILogger _logger;
private readonly Timer _timer;
private readonly IHostLifetime _hostLifetime; // 用于优雅关闭主机
public MyTimedBackgroundTask(ILogger
{
_logger = logger;
一直运行的后台任务
让我们深入一段关于后台任务的代码。这段代码定义了一个名为`PrinterHostedService2`的服务,它继承自`BackgroundService`。我们知道,一旦继承了`BackgroundService`,就必须实现其中的`ExecuteAsync`方法。除此之外,可以选择性地覆盖`StartAsync`和`SAsync`等方法。
在`PrinterHostedService2`中,我们看到了一个始终在跑的后台任务。该任务会不断输出日志信息,并且每次输出之间会有一个休眠期,这个休眠期是在配置文件中指定的秒数。它还使用了依赖注入,可以方便地注入数据仓储等信息。
接下来,我们再看另一个定时运行的后台任务示例,称为`TimerHostedService`。这个任务使用`Timer`来完成定时运行的功能。它在启动时创建一个定时器,然后按照设定的时间间隔执行工作。当定时器触发时,它会输出日志信息。它还包含了开始和停止任务的方法,并在任务结束时释放资源。
这两个后台任务都是通过控制台形式启动的。为了更方便地观察任务的运行情况,我们引入了NLog来记录任务的日志。
让我们进一步了解这两个后台任务的细节。首先是`PrinterHostedService2`的实现。在任务启动时,它会创建一个日志记录器并获取配置信息。然后,它会进入一个循环,每次循环都会输出日志信息并休眠一段时间。休眠的时间由配置文件中的设置决定。这样,即使在没有用户交互的情况下,该服务也能持续运行并输出日志信息。
对于`TimerHostedService`,它在启动时创建一个定时器并设置初始延迟和触发间隔。定时器触发时,会执行一些工作并输出日志信息。它还提供了停止任务并释放资源的方法。这样,我们可以根据需要随时启动或停止任务,并确保资源的合理使用。
在程序的入口处,我们有一个名为Program的类,它包含了一个特殊的Main函数,这个函数是程序的起点。不同于传统的Main函数,这是一个异步的任务(async Task Main)。让我们深入了解这个Main函数的代码。
我们创建了一个HostBuilder对象,它是ASP.NET Core的主机构建器,用于配置应用程序的各个方面。我们的程序将依赖于它来进行配置和启动。
在构建器的配置过程中,我们首先设置了日志系统。通过使用NLog,我们可以轻松地在应用程序中添加日志记录功能。我们加载了NLog的配置文件"nlog.config",以便自定义日志记录的行为。
接下来,我们配置主机。这里我们主要处理命令行参数,如果提供了命令行参数(args),我们将它们添加到主机的配置中。
然后,我们配置应用程序的设置。我们加载了"appsettings.json"文件以及针对特定环境的设置文件(如果存在的话)。我们还添加了环境变量和命令行参数的设置。这样,我们就可以从多个来源获取应用程序的配置信息。
在配置服务阶段,我们添加了一些必要的服务。这里我们使用了Options模式来配置应用程序设置,并注册了两个托管服务:PrinterHostedService2和TimerHostedService。这些服务将在程序启动时自动运行。
我们使用HostBuilder的RunConsoleAsync方法来启动控制台应用程序。这将启动我们的托管服务并等待用户输入来关闭程序。在这个过程中,我们的程序将按照我们在配置阶段设置的规则运行。这样,我们就完成了一个基本的ASP.NET Core应用程序的创建和配置过程。在这个过程中,我们充分利用了HostBuilder的灵活性和强大的配置能力,使得我们的程序能够轻松地适应不同的环境和需求。我们也通过添加日志和环境配置等功能,增强了程序的健壮性和可维护性。这就是我们的Main函数以及它的工作流程。
网络推广网站
- .NET Core基于Generic Host实现后台任务方法教程
- node.js中TCP Socket多进程间的消息推送示例详解
- ASP.net中实现基于UrlRewrite的防盗链功能
- 浅谈JavaScript 标准对象
- Angular1.x自定义指令实例详解
- Winform OpenFileDialog打开文件对话框
- ES7中利用Await减少回调嵌套的方法详解
- javascript 中的 delete及delete运算符
- 使用vs2019加.net core 对WeiApi的创建过程详解
- JSP中param动作的实例详解
- Angularjs根据json文件动态生成路由状态的实现方法
- 一个统计表每天的新增行数及新增存储空间的功
- 怎么引入(调用)一个JS文件
- 详解IWinter 一个路由转控制器的 Nodejs 库
- php微信公众平台开发之获取用户基本信息
- cocos2dx骨骼动画Armature源码剖析(二)