.NET Core后台服务

提问

如何创建 .NET Core后台服务

回答

  1. 引入nuget
Microsoft.Extensions.Hosting
  1. 创建服务
using ActiveAlarmDemo.Models;
using Microsoft.Extensions.Hosting;

namespace ActiveAlarmDemo.Services
{
    public class RecordOnPlanServce : BackgroundService
    {
        private readonly swaggerClient _swaggerClient;
        private readonly ActiveAlarmContext _activeAlarmContext;
        public RecordOnPlanServce(swaggerClient swaggerClient, ActiveAlarmContext activeAlarmContext)
        {
            _swaggerClient = swaggerClient;
            _activeAlarmContext = activeAlarmContext;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            Console.WriteLine("RecordOnPlanServce");
            //var c = new swaggerClient("http://172.26.176.171:18100/", new HttpClient());
            var authentication = await _swaggerClient.AuthenticationAsync("client_credentials", "HLT2", "HLT2");
            //var context = new ActiveAlarmContext();
            for (int i = 0; i < 100; i++)
            {
                await Task.Delay(2000);

                //var result = await c.GetAllAlarmActiveStateAsync(authentication.Access_token);
                var result = await _swaggerClient.GetEquipmentActiveAlarmsAsync(authentication.Access_token, "PLSDCluster.High_Voltage.Generators.GEN4");
                await _activeAlarmContext.AlarmDataValues.AddRangeAsync(result);
                Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"));
                var count = await _activeAlarmContext.SaveChangesAsync();
                Console.WriteLine(count);
            }
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            throw new NotImplementedException();
        }
    }
}

  1. 注入服务
using ActiveAlarmDemo;
using ActiveAlarmDemo.Models;
using ActiveAlarmDemo.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices((_, services) =>
        services.AddTransient(typeof(swaggerClient),x=> new swaggerClient("http://****:18100/", new HttpClient()))
            .AddTransient<ActiveAlarmContext>()
            .AddHostedService<RecordOnPlanServce>()
            .AddHostedService<RecordSubPlanService>()
            .AddHostedService<ActiveAlarmService>())

    .Build();

await host.RunAsync();

参考

https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-6.0&tabs=visual-studio

Examples

https://gitee.com/galacode/activealarmdemo

posted @   东百牧码人  阅读(131)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示