Novidades do .NET 8: melhorias na implementação de serviços com IHostedLifecycleService

Renato Groffe
3 min readOct 16, 2023

--

A interface IHostedService está presente desde o .NET Core 2.0, sendo comumente empregada na construção de serviços para execução em background. Um caso comum de uso dessa estrutura está na implementação de consumers de soluções de mensageria, com os processamentos de mensagens de filas e tópicos do Azure Service Bus representando ótimos exemplos de utilização deste recurso.

Os links a seguir são de 2 repositórios em que fiz uso de IHostedService, consumindo mensagens a partir de filas e tópicos do Azure Service Bus:

https://github.com/renatogroffe/DotNet7-WorkerService-AzureServiceBus-Topic-SqlServer-AppInsights_ContagemAcessos

https://github.com/renatogroffe/DotNet7-Worker-AzureServiceBus-Queue-ServiceBusClient_Consumer

Já na listagem seguinte temos um exemplo de Worker Service que utiliza IHostedService, implementando os 2 métodos exigidos por esta interface (StartAsync e StopAsync):

No .NET 8 as capacidades originais de IHostedService foram estendidas, através de um novo tipo derivado dessa estrutura: a interface IHostedLifecycleService (também pertencente ao namespace Microsoft.Extensions.Hosting).

Além de StartAsync e StopAsync, a interface IHostedLifecycleService espera que sejam implementados os seguintes métodos:

  • StartingAsync (executado antes de StartAsync);
  • StartedAsync (executado depois de StartAsync);
  • StoppingAsync (executado antes de StopAsync);
  • StoppedAsync (executado depois de StopAsync).
Clique nesta imagem para visualizar com uma melhor resolução

Na próxima listagem temos uma variação do primeiro exemplo, empregando agora as novas capacidades da interface IHostedLifecycleService:

  • A inicialização da instância do tipo Timer (namespace System.Threading) foi transferida agora para StartingAsync, com uma chamada a Change em StartAsync habilitando a execução deste objeto a cada 1 segundo (e esperando 5 segundos para iniciar este processo);
  • Foram implementados ainda os métodos StartedAsync, StoppingAsync e StoppedAsync.

O código que define a classe ApplicationState pode ser observado na listagem a seguir:

Nos próximos prints temos o resultado da execução deste Worker Service a partir do Visual Studio 2022:

Clique nesta imagem para visualizar com uma melhor resolução
Clique nesta imagem para visualizar com uma melhor resolução

A animação a seguir mostra cada estágio inicial de execução envolvendo a utilização de IHostedLifecycleService:

Clique nesta imagem para visualizar com uma melhor resolução

Já na próxima animação está o que acontece ao se interromper a execução do serviço:

Clique nesta imagem para visualizar com uma melhor resolução

O código desta aplicação foi disponibilizado no GitHub:

https://github.com/renatogroffe/DotNet8-WorkerService-IHostedLifecycleService

Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker