如何在.net核心后台服务ExecuteAsync中只启动一次进程



我们有一个后台服务,监听来自不同消息队列的事件。该服务是使用VS模板为worker service创建的,并实现了BackgroundService

我需要确保队列侦听器只调用一次ExecuteAsync法中。但是下面的代码会无限地调用ListenToQueue方法。

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
ListenToQueue(queue1);
ListenToQueue(queue2);
}

如果你想在应用程序启动时调用一些方法,我建议你可以考虑使用IHostApplicationLifetime Events。详细信息,可参考本文。

public class HostApplicationLifetimeEventsHostedService : IHostedService
{
private readonly IHostApplicationLifetime _hostApplicationLifetime;
public HostApplicationLifetimeEventsHostedService(
IHostApplicationLifetime hostApplicationLifetime)
=> _hostApplicationLifetime = hostApplicationLifetime;
public Task StartAsync(CancellationToken cancellationToken)
{
_hostApplicationLifetime.ApplicationStarted.Register(OnStarted);
_hostApplicationLifetime.ApplicationStopping.Register(OnStopping);
_hostApplicationLifetime.ApplicationStopped.Register(OnStopped);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
=> Task.CompletedTask;
private void OnStarted()
{
// ...
}
private void OnStopping()
{
// ...
}
private void OnStopped()
{
// ...
}
}

最新更新