【愚公系列】2023年04月 .NET CORE工具案例-IHostedService实现任务调度

325 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

前言

1.IHostedService是什么

IHostedService是一个ASP.NET Core中的接口,用于定义生命周期管理的后台服务。它可以帮助我们在应用程序启动时启动服务,并在应用程序关闭时优雅地关闭服务。

IHostedService主要用于后台任务的运行,例如在ASP.NET Core应用程序中运行定期的数据备份任务,或在Windows服务中执行定期的数据同步任务。它是一种强大的工具,可以在应用程序的后台运行几乎任何类型的任务。

IHostedService 接口为主机托管的对象定义了两种方法:

  • StartAsync(CancellationToken):应仅限于短期任务,因为托管服务是按顺序运行的,在 StartAsync 运行完成之前不会启动其他服务。
  • StopAsync(CancellationToken):在主机执行正常关闭时触发。 StopAsync 包含结束后台任务的逻辑。 实现 IDisposable 和终结器(析构函数)以处置任何非托管资源。

注意:如果应用意外关闭(例如,应用的进程失败),则可能不会调用 StopAsync。 因此,在 StopAsync 中执行的任何方法或操作都可能不会发生。

官网网址:learn.microsoft.com/zh-cn/dotne…

在这里插入图片描述

一、IHostedService实现任务调度

1.新建任务调度类

public class TestHostedService : IHostedService, IDisposable
    {
        private Timer? _timer;

        public Task StartAsync(CancellationToken cancellationToken)
        {
            //相当于前端的setInterval定时执行,所以每过1秒都会执行一次
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));

            return Task.CompletedTask;
        }

        private void DoWork(object? state)
        {
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            Console.WriteLine("StopAsync");

            return Task.CompletedTask;
        }


        public void Dispose()
        {
            _timer?.Dispose();
        }
    }

在这里插入图片描述

2.注册任务调度类

//添加主机服务
builder.Services.AddHostedService<TestHostedService>();

在这里插入图片描述

3.启动程序

在这里插入图片描述