【发布时间】:2019-09-03 13:30:54
【问题描述】:
我有一个基于此示例的 netcore 2.0 的 Windows 服务: https://www.stevejgordon.co.uk/running-net-core-generic-host-applications-as-a-windows-service
在我的例子中,主要的托管服务订阅了一个消息队列并按顺序处理消息(每次出现新消息时队列 api 都会引发一个事件)。 如果任何消息无法处理,它们将被移至不同的队列以重试(x 次,具有指数回退)。所以这需要在单独的线程上完成,以免造成主队列处理的延迟
是否可以配置2个HostedServices:
var builder = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<MyMsgProcessingService>();
services.AddHostedService<MyRetryService>();
});
这确实开始了,它确实命中了每个服务的StartAsync 方法(在IHostedService 接口上)
或者您是否只允许拥有(拥有)一个IHostedService 实现?
如果两个都可以,那么慢服务的工作会不会拖累主服务的工作?
如果只有一个,最好只启动另一个线程来完成重试队列的工作吗?我如何确保新线程在服务运行的整个过程中都存在? while 循环似乎不合适,因为我只是在等待引发事件
例如
public Task StartAsync(CancellationToken cancellationToken)
{
Task t = Task.Run(() => ProcessRetrys(), cancellationToken);
【问题讨论】:
-
有同样的问题,然后发现确认in the MS Docs在一个
IHost下注册和托管多个服务是可以接受的。
标签: c# multithreading .net-core windows-services task