• .NET Core 中基于 IHostedService 实现后台定时任务


    .NET Core 2.0 引入了 IHostedService ,基于它可以很方便地执行后台任务,.NET Core 2.1 则锦上添花地提供了 IHostedService 的默认实现基类 BackgroundService ,在这篇随笔中分别用 Web 与 Console 程序体验一下。

    首先继承 BackgroundService 实现一个 TimedBackgroundService

    public class TimedBackgroundService : BackgroundService
    {
        private readonly ILogger _logger;
        private Timer _timer;
     
        public TimedBackgroundService(ILogger<TimedBackgroundService> logger)
        {
            _logger = logger;
        }
     
        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
            return Task.CompletedTask;
        }
     
        private void DoWork(object state)
        {
            _logger.LogInformation($"Hello World! - {DateTime.Now}");
        }
     
        public override void Dispose()
        {
            base.Dispose();
            _timer?.Dispose();
        }
    }

    在 ASP.NET Core Web 程序中执行这个后台定时任务只需在 Startup 的 ConfigureServices 注册 TimedBackgroundService 即可:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHostedService<TimedBackgroundService>();
    }

    然后只要站点启动,就会定时输出日志:

    Now listening on: http://localhost:5000
    Application started. Press Ctrl+C to shut down.
    info: BackgroundServiceSample.Services.TimedBackgroundService[0]
          Hello World! - 9/14/2018 17:48:02
    info: BackgroundServiceSample.Services.TimedBackgroundService[0]
          Hello World! - 9/14/2018 17:48:07
    info: BackgroundServiceSample.Services.TimedBackgroundService[0]
          Hello World! - 9/14/2018 17:48:12

    接下来在控制台程序中体验一下。
    基于 Generic Host 实现如下的控制台程序,也是执行在 ConfigureServices 中注册一下 TimedBackgroundService 。

    class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = new HostBuilder()
                .ConfigureLogging(logging =>
                {
                    logging.AddConsole();
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<TimedBackgroundService>();
                });
     
            await builder.RunConsoleAsync();
        }
    }

    dotnet run 运行程序后 TimedBackgroundService 定时输出了日志:

    info: BackgroundServiceSample.Services.TimedBackgroundService[0]
          Hello World! - 9/14/2018 17:59:37
    info: BackgroundServiceSample.Services.TimedBackgroundService[0]
          Hello World! - 9/14/2018 17:59:42
    info: BackgroundServiceSample.Services.TimedBackgroundService[0]
          Hello World! - 9/14/2018 17:59:47

    体验完成。

    转:https://www.cnblogs.com/dudu/p/9647619.html

    参考:https://docs.microsoft.com/zh-cn/dotnet/architecture/microservices/multi-container-microservice-net-applications/background-tasks-with-ihostedservice

  • 相关阅读:
    读书笔记----软件设计原则、设计模式
    程伟杰 | 2021软件代码开发技术作业一 | 自我介绍+课程6问
    团队作业3-需求改进&系统设计
    团队项目作业2-需求规格说明书
    【Android实习】20场面试斩获大厂offer,我学会了什么
    通俗易懂,android是如何管理内存的
    关于Handler同步屏障你可能不知道的问题
    清晰图解深度分析HTTPS原理
    这一篇TCP总结请收下
    深入浅出Java线程池:源码篇
  • 原文地址:https://www.cnblogs.com/superfeeling/p/15323019.html
Copyright © 2020-2023  润新知