首页 > 其他分享 >dot net core使用BackgroundService运行一个后台服务

dot net core使用BackgroundService运行一个后台服务

时间:2024-05-27 15:35:35浏览次数:18  
标签:core service working ... BackgroundService Hosting Background 后台任务 dot

不管是在控制台程序还是asp.net core程序中,我们经常会有用到一个需要长时间运行的后台任务的需求。通常最直觉的方式是使用Thread实例来新建一个线程,但是这样需要自行管理线程的启动和停止。

.net core中提供了一个继承自IHostedService的基类BackgroudService能够方便地实现一个长程的后台任务。

为了使用这个基类进行开发,我们需要向项目中添加包:Microsoft.Extensions.Hosting
然后新建一个后台任务类AppHostedService并实现ExecuteAsync方法即可。

一个简单的ExecuteAsync任务实现

protected override async Task<object> ExecuteAsync(CancellationToken stoppingToken)
{
	int loop = 0;
	while (!stoppingToken.IsCancellationRequested) {
		try {
			Console.WriteLine("Backgroun service working...");
			await Task.Delay(5000, stoppingToken);
		} catch(TaskCanceledException exception)
		{
			Console.WriteLine($"TaskCanceledException Error: {exception.Message}");
		}
	}
	return Task.CompletedTask;
}

另外在主程序中使用Host.CreateDefaultBuilder()来创建运行程序的托管服务并加入我们刚刚创建的AppHostedService

await Host.CreateDefaultBuilder()
    .UseConsoleLifetime()
    .ConfigureServices((context, services) => {
        services.AddHostedService<AppHostService>();
    })
    .RunConsoleAsync();

创建完成后编译运行,将看到托管服务的启动输出信息和在任务中周期性输出的信息。完整代码见Gist

Hello, World!
Start Async AppHostService
Backgroun service working...
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\Users\ZhouXinfeng\tmp\hostservice\bin\Debug\net8.0
Background service working...
Background service working...
Background service working...
Background service working...
Background service working...
Background service working...
Background service working...
Background service working...

参考链接

  1. .NET Core 实现后台任务(定时任务)BackgroundService(二)(https://www.cnblogs.com/ysmc/p/16468560.html)
  2. Background tasks with hosted services in ASP.NET Core
  3. The "correct" way to create a .NET Core console app without background services

标签:core,service,working,...,BackgroundService,Hosting,Background,后台任务,dot
From: https://www.cnblogs.com/mrchip/p/18215599

相关文章

  • centos7.9 宝塔环境安装dotnet8
    官方下载二进制文件,https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0选择对应linux然后上传到到目录,这边是随意的home/dotnet8然后执行下面的命令,提示没有文件或者文件夹,就对应创建下文件夹目录就可以。可以使用linux命令:mkdir-p/home/dotnet8mkdir-p/usr......
  • ASP.NET CORE kindeditor在线编辑器示例(上传多图和插入VIDEO标签)
    2024年05月26日更新以前记录都过时了,ASP.NETASPX版本的直接看他里面的示例就好,今天把自己弄的上传多图和插入video标签的代码贴上来。。以备以后需要用的时候直接复制粘贴。。。ASP.NETCORE版本,VS2022,原来里面也有个上传多图和插入视频的。。用的flash来上传多图和插入的embe......
  • ASP.NET Core 中的运行状况检查
    基本运行状况探测对于许多应用,报告应用在处理请求方面的可用性(运行情况)的基本运行状况探测配置足以发现应用的状态。基本配置会注册运行状况检查服务,并调用运行状况检查中间件以通过运行状况响应在URL终结点处进行响应。默认情况下,不会注册任何特定运行状况检查来测试任何......
  • 写入自定义 ASP.NET Core 中间件
    中间件是一种装配到应用管道以处理请求和响应的软件。ASP.NETCore提供了一组丰富的内置中间件组件,但在某些情况下,你可能需要写入自定义中间件。自定义中间件类通常,中间件封装在类中,并且通过扩展方法公开。一、内联中间件(不推荐) 请考虑以下内联中间件,该中间件通过查询字......
  • 视差背景,GODOT游戏引擎学习笔记(五)
    背景图片资源今天周六玩了一天,现在晚上来更新一下帖子。前面几节我们学习了创建一个人物精灵节点使其移动。这节我们来学习创建背景。会用到三个图片文件。我已经上传到csdn了,链接如下:https://download.csdn.net/download/weixin_66990397/89356894?spm=1001.2014.3001.5501......
  • 开坑开坑,GODOT游戏引擎学习笔记(一)
    前言         本人重度游戏玩家,计科专业学生,玩了许多游戏已经逐渐电子羊尾,于是打算学习几个游戏引擎,一个方面是爱好,另一方面也是多掌握点技术。先打算从2D游戏开始学,目前引擎确定为GODOT,一个开源且适合新手的引擎。后续学习unity和虚幻等引擎也会继续更新,同时也会开......
  • .NET Core中给上传图片的添加水印
    一.安装System.Drawing.Common库工具->NuGet包管理->程序包管理控制台输入命令Install-PackageSystem.Drawing.Common二.代码案例实现usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSy......
  • 2024永久免费破解版CorelDRAW汉化百度云网盘下载
     CorelDRAW®GraphicsSuite2024无疑是一款配备齐全的专业设计工具包,它以其卓越的性能和丰富的功能,为设计师们提供了高效且令人惊艳的矢量插图、布局、照片编辑和排版项目。这款软件套件不仅功能强大,而且价格实惠,用户可以通过订阅的方式获得持续的价值。订阅CorelDRAW®Gr......
  • aspnetcore插件开发dll热加载 二
    这一篇文章应该是个总结。投简历的时候是不是有人问我有没有abp的开发经历,汗颜!在各位大神的尝试及自己的总结下,还是实现了业务和主机服务分离,通过dll动态的加载卸载,控制器动态的删除添加。项目如下: 演示效果: 下面就是代码部分:重点1.IActionDescriptorChangeProvider......
  • DotNetty ByteBuffer
    DotNetty是一个高性能的.NET网络通信框架,基于Netty,支持TCP、UDP、HTTP、WebSocket等协议。适用于高并发、低延迟场景,如实时通信、游戏服务器、IoT应用及大型分布式系统,通过异步I/O、零拷贝等技术提升性能,具备易用性、可扩展性。架构上,围绕Channel、EventLoop、ChannelPipel......