暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

Net分享 2021-09-23
1079

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

第一步:首先继承 BackgroundService 实现一个 TimedBackgroundService

 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>();
}

复制

简单Demo使用

创建TaskAndOrderService
类,继承 : BackgroundService
,实现接口

/// <summary>
    /// 任务订单处理自动开始结束
    /// </summary>
    public class TaskAndOrderService : BackgroundService
    {

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
           
            while (!stoppingToken.IsCancellationRequested)
            {
                 //doto (处理业务)
                 Console.WriteLine($"{DateTime.Now}-你好");
           
                await Task.Delay(5000, stoppingToken);
            }
        }

    }

复制

然后在server中注册

 //设置任务自动开始后者任务结束
            services.AddHostedService<TaskAndOrderService>();

复制



文章转载自Net分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论