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