首页 > 解决方案 > IHostedService 多个实现的最佳实践

问题描述

我有一个充当网关的应用程序,其中有两个进程,它们不断处理事件流。这两个进程都有启动和停止方法。他们通过事件队列相互交谈。

public class ServiceComposite: IHostedService
{
    public ServiceComposite(IServiceA serviceA, IServiceB serviceB)
    {
        this.serviceA = serviceA;
        this.serviceB = serviceB;
    }

    public Task StartAsync(CancellationToken token)
    {
        return Task.Run(() => 
        {
            Console.Writeline("Starting services");
            serviceA.Start();
            serviceB.Start();
        }, token);
    }

    public Task StopAsync(CancellationToken token)
    {
        return Task.Run(() => 
        {
            Console.Writeline("Stopping services");
            serviceA.Stop();
            serviceB.Stop();
        }, token);
    }
}

起初我想创建一个带有启动和停止方法的接口,因为这样我就可以注入一个 IEnumerable 并循环通过它来启动和停止。但后来我看到 IHostedService 与 StartAsync 和 StopAsync 有一个非常相似的接口。

将它们保持原样的利弊是什么,即一个 IHostedService 实现,它控制两个进程以及将我的进程转换为 IHostService 并注册两者的利弊

services.AddHostedService<ServiceA>();
services.AddHostedService<ServiceB>();

标签: c#.net-coremicrosoft.extensions.hosting

解决方案


推荐阅读