前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年12月 .NET CORE工具案例-BackgroundService实现任务调度

【愚公系列】2022年12月 .NET CORE工具案例-BackgroundService实现任务调度

作者头像
愚公搬代码
发布2022-12-07 13:18:08
8880
发布2022-12-07 13:18:08
举报
文章被收录于专栏:历史专栏历史专栏

文章目录


前言

1.BackgroundService是什么

BackgroundService 是用于实现长时间运行的 IHostedService 的基类。

调用 ExecuteAsync(CancellationToken) 来运行后台服务。实现返回一个 Task,其表示后台服务的整个生存期。

在 ExecuteAsync 变为异步(例如通过调用 await)之前,不会启动任何其他服务。避免在 ExecuteAsync 中执行长时间的阻塞初始化工作。

StopAsync(CancellationToken) 中的主机块等待完成 ExecuteAsync。

调用 IHostedService.StopAsync 时,将触发取消令牌。当激发取消令牌以便正常关闭服务时,ExecuteAsync 的实现应立即完成。否则,服务将在关闭超时后不正常关闭。

StartAsync 应仅限于短期任务,因为托管服务是按顺序运行的,在 StartAsync 运行完成之前不会启动其他服务。长期任务应放置在 ExecuteAsync 中。

官网网址:https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.hosting.backgroundservice?view=dotnet-plat-ext-7.0

在这里插入图片描述
在这里插入图片描述

一、BackgroundService实现任务调度

1.新建服务类

ITaskWorkService.cs

代码语言:javascript
复制
public interface ITaskWorkService
{
    Task TaskWorkAsync(CancellationToken stoppingToken);
}

TaskWorkService.cs

代码语言:javascript
复制
public class TaskWorkService : ITaskWorkService
{
    public async Task TaskWorkAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            //执行任务
            Console.WriteLine($"{DateTime.Now}");

            //周期性任务,于上次任务执行完成后,等待5秒,执行下一次任务
            await Task.Delay(500);
        }
    }
}
在这里插入图片描述
在这里插入图片描述

2.注册服务类

代码语言:javascript
复制
//注册定时任务执行的类
builder.Services.AddScoped<ITaskWorkService, TaskWorkService>();
在这里插入图片描述
在这里插入图片描述

3.新建任务调度类

代码语言:javascript
复制
/// <summary>
/// 定时任务类
/// </summary>
public class BackgroundServiceDemo : BackgroundService
{
    private readonly IServiceProvider _services;

    public BackgroundServiceDemo(IServiceProvider services)
    {
        _services = services;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        using var scope = _services.CreateScope();
        //获取服务类
        var taskWorkService = scope.ServiceProvider.GetRequiredService<ITaskWorkService>();
        //执行服务类的定时任务
        await taskWorkService.TaskWorkAsync(stoppingToken);
    }
}
在这里插入图片描述
在这里插入图片描述

4.注册任务调度类

代码语言:javascript
复制
//添加主机服务
builder.Services.AddHostedService<BackgroundServiceDemo>();
在这里插入图片描述
在这里插入图片描述

5.启动程序

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
    • 1.BackgroundService是什么
    • 一、BackgroundService实现任务调度
      • 1.新建服务类
        • 2.注册服务类
          • 3.新建任务调度类
            • 4.注册任务调度类
              • 5.启动程序
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档