您的位置:首页 > 房产 > 家装 > 微信公众号如何创建文件夹_泰安网络推广_电影站的seo_外贸营销

微信公众号如何创建文件夹_泰安网络推广_电影站的seo_外贸营销

2024/12/23 4:15:12 来源:https://blog.csdn.net/hefeng_aspnet/article/details/143175613  浏览:    关键词:微信公众号如何创建文件夹_泰安网络推广_电影站的seo_外贸营销
微信公众号如何创建文件夹_泰安网络推广_电影站的seo_外贸营销

        IHostedService.NET 8 引入了使用和管理后台任务的强大功能BackgroundService。这些服务使长时间运行的操作(例如计划任务、后台处理和定期维护任务)可以无缝集成到您的应用程序中。本文探讨了这些新功能,并提供了实际示例来帮助您入门。您可以在我的GitHub 存储库中找到这些示例的源代码。

什么是后台服务?
    .NET 中的后台服务允许您独立于主应用程序线程在后台运行任务。这对于需要连续或定期运行且不会阻塞主应用程序流程的任务至关重要。

IHostedService 接口

    该IHostedService接口定义了两种方法:

    StartAsync(CancellationToken cancellationToken):应用程序主机启动时调用。

    StopAsync(CancellationToken cancellationToken):当应用程序主机正在执行正常关闭时调用。

IHostedService 实现示例:

using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

public class TimedHostedService : IHostedService, IDisposable
{
    private readonly ILogger<TimedHostedService> _logger;
    private Timer _timer;

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

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

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

        return Task.CompletedTask;
    }

    private void DoWork(object state)
    {
        _logger.LogInformation("Timed Hosted Service is working.");
    }

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

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

        return Task.CompletedTask;
    }

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

BackgroundService Class
    该类BackgroundService是一个抽象基类,可简化后台任务的实现。它提供了一个方法来重写:

    ExecuteAsync(CancellationToken stoppingToken):包含后台任务的逻辑并运行直到应用程序关闭。

BackgroundService 实现示例:

using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

public class TimedBackgroundService : BackgroundService
{
    private readonly ILogger<TimedBackgroundService> _logger;

    public TimedBackgroundService(ILogger<TimedBackgroundService> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Timed Background Service running.");

        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("Timed Background Service is working.");
            await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
        }

        _logger.LogInformation("Timed Background Service is stopping.");
    }

实际用途:
    要在您的 .NET 应用程序中使用这些后台服务,您需要在依赖注入容器中注册它们。这可以在文件中完成Program.cs。

注册托管服务:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = Host.CreateDefaultBuilder(args)
            .ConfigureServices(services =>
            {
                services.AddHostedService<TimedHostedService>();
                services.AddHostedService<TimedBackgroundService>();
            })
            .Build();

        await host.RunAsync();
    }
}

主要区别

抽象级别:

    IHostedService:需要手动执行启动和停止逻辑。

    BackgroundService:通过提供一个具有单一方法来重写基类来简化实现。

用例:

    IHostedService:适用于需要对服务生命周期进行细粒度控制的更复杂的场景。

    BackgroundService:非常适合那些可以从减少样板代码中受益的更简单、长时间运行的任务。

结论
    .NET 8 的后台服务通过IHostedService和BackgroundService提供了一种强大而灵活的方式来管理后台任务。通过根据您的需求选择适当的抽象,您可以有效地实现和管理应用程序中的长期运行操作。这些新功能增强了创建响应迅速、可扩展且可维护的 .NET 应用程序的能力。

        本文提供了开始将后台服务集成到 .NET 应用程序中所需的基础。对于更复杂的场景,请考虑探索 .NET 托管框架提供的其他功能和配置。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com