网站建设资讯

NEWS

网站建设资讯

NetCore中怎么利用托管服务执行后台任务

NetCore中怎么利用托管服务执行后台任务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联专注于黑龙江网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供黑龙江营销型网站建设,黑龙江网站制作、黑龙江网页设计、黑龙江网站官网定制、重庆小程序开发服务,打造黑龙江网络公司原创品牌,更为您提供黑龙江网站排名全网营销落地服务。

初始化准备

首先我们创建一个控制台项目,下载基础包

nuget install Microsoft.Extensions.Hosting

初始化Program.cs文件

public static class Program
{
    static async void Main(string[] args)
    {
        var builder = new HostBuilder().ConfigureServices((context, service) =>
        {

        });

        await builder.RunConsoleAsync();
    }
}

使用详解

一般后台服务

开始使用

注入后台服务非常简单,调用service.AddHostedService方法将自定义的服务进行注入。

service.AddHostedService();

自定义的后台服务类需要满足定义的接口,才可以被正常使用,下面我引用一个官方的案例进行说明

定时后台任务使用 [System.Threading.Timer]类。 计时器触发任务的 DoWork 方法。 在 StopAsync 上禁用计时器,并在 Dispose 上处置服务容器时处置计时器:

继承IHostedService接口,实现StartAsyncStopAsync方法即可将服务正常注入后台任务中。

IDisposable的作用主要是在进程关闭时释放定时器资源

public class TimedHostedService : IHostedService, IDisposable
{
    private int executionCount = 0;
    private readonly ILogger _logger;
    private Timer _timer;

    public TimedHostedService(ILogger logger)
    {
        _logger = logger;
    }

    public Task StartAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Timed Hosted Service running.");

        _timer = new Timer(DoWork, null, TimeSpan.Zero, 
            TimeSpan.FromSeconds(5));

        return Task.CompletedTask;
    }

    private void DoWork(object state)
    {
        var count = Interlocked.Increment(ref executionCount);

        _logger.LogInformation(
            "Timed Hosted Service is working. Count: {Count}", count);
    }

    public Task StopAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Timed Hosted Service is stopping.");

        _timer?.Change(Timeout.Infinite, 0);

        return Task.CompletedTask;
    }

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

内容整合

将上文中的内容进行一个整合,得到的效果是

public static class Program
{
    static async void Main(string[] args)
    {
        var builder = new HostBuilder().ConfigureServices((context, service) =>
        {
        	service.AddHostedService();
        });

        await builder.RunConsoleAsync();
    }
}

Ctrl+F5即可查看执行效果

其他说明

以上说明的是后台任务在Core控制台中的应用,那么在AspNetCore【Web项目】中是怎么使用的呢。当然都是一样的,只是注入的地方发生了小小的改变,在AspNetCore中注入通常发生在StartUp.cs中的方法ConfigureServices。使用方法和控制台一致。

public void ConfigureServices(IServiceCollection services)
{
	service.AddHostedService();
}

带作用域的服务

适用于Web项目中涉及数据库等外连接操作的场景,例如

每一次web请求对应一个数据库上下文[DbContext],这个时候就要用要带作用域的服务。

带作用域的服务使用也非常简单,可以参考官方文档,这里我就不做其他介绍

看完上述内容,你们掌握NetCore中怎么利用托管服务执行后台任务的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


当前名称:NetCore中怎么利用托管服务执行后台任务
本文URL:http://cdweb.net/article/jcieoh.html