zoukankan      html  css  js  c++  java
  • 使用 IHostedService 和 BackgroundService 类在微服务中实现后台任务

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

    .NET Core 2.1 中引入了 Host(实现 IHost 的基类)。 基本上,Host 能让用户拥有与 WebHost(依赖项注入、托管服务等)相似的基础结构,但在这种情况下,只需拥有一个简单轻便的进程作为主机,与 MVC、Web API 或 HTTP 服务器功能无关。

    因此,可以选择一个专用主机进程或使用 IHost 创建一个来专门处理托管服务,例如仅用于托管 IHostedServices 的微服务,或者也可以选择性地扩展现有的 ASP.NET Core WebHost,例如现有的 ASP.NET Core Web API 或 MVC 应用。

    每种方法都有优缺点,具体取决于业务和可伸缩性需求。 重要的是,如果后台任务与 HTTP (IWebHost) 无关,则应使用 IHost

    练习 :

    StartUp.cs注册

     services.AddSingleton<IHostedService, BGService>();

    创建类

    public class BGService : BackgroundService
        {
            private CancellationTokenSource cancelSource;
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                
                //while (!stoppingToken.IsCancellationRequested)
                //{
                //    await Task.Delay(1000, stoppingToken).ContinueWith(x =>
                //    {
                //        Console.WriteLine($"{DateTime.Now.ToString()}");
                //    });
                //}
    
                for (int i = 0; i < 10; i++)
                {
                    if (!stoppingToken.IsCancellationRequested)
                    {
                        await Task.Delay(1000, stoppingToken).ContinueWith(x =>
                        {
                            Console.WriteLine($"{DateTime.Now.ToShortDateString()}");
                        });
                    }
                    if (i == 5)
                    {
                       await StopAsync(stoppingToken);
                    }
                }
            }
            public override Task StartAsync(CancellationToken cancellationToken)
            {
                cancelSource = new CancellationTokenSource();
                Console.WriteLine("开始任务");
                
                return base.StartAsync(cancelSource.Token);
            }
            public override Task StopAsync(CancellationToken cancellationToken)
            {
                cancelSource.Cancel();
                Console.WriteLine("任务结束");
                return base.StopAsync(cancelSource.Token);
            }
        }
  • 相关阅读:
    XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件
    在Xamarin.iOS项目中使用预设数据库
    函数封装多个不同按钮的点击事件
    ajax请求数据动态渲染表格
    计算历时长度
    layui单文件上传
    滚动到顶部固定
    下载
    第一个项目技术总结
    单选框
  • 原文地址:https://www.cnblogs.com/lunawzh/p/14812945.html
Copyright © 2011-2022 走看看