Background Services com o Hosted Service — ASP.NET Core
Hoje vamos falar um pouco sobre o Hosted Service, que é um recurso disponibilizado pela Microsoft na plataforma .NET e que nos ajuda a desenvolver rotinas de processamento em segundo plano.
Como é seu funcionamento?
O Hosted Service fica atrelado a sua aplicação, ou seja, é uma simples classe no qual implementamos uma rotina de processamento em que vai ser executada junto com sua aplicação, porém em background.
Para isso, apenas registramos a nossa classe como um Hosted Service no Startup da nossa aplicação e pronto, toda vez que a aplicação iniciar, o Hosted Service inicia também seu processamento.
E o mais interessante, é que ele independente de configuração de servidor, ou seja, como ele vai estar atrelado a sua aplicação, onde sua aplicação rodar, o Hosted Service vai rodar junto.
Cenários de Uso
Os serviços que rodam em segundo plano são ótimas alternativas para dar apoio a algum tipo de tarefa de nossa aplicação, como por exemplo:
- Gerar ou processar mensagem de uma mensageria
- Executar rotinas de atualização de informações
- Executar rotinas de atualização de cache
- Geração de relatório
- Envio de email
Preocupações
Quando utilizamos o Hosted Service, devemos tomar muito cuidado quanto a complexidade da tarefa que vamos delegar a ele, pois ele compartilha o mesmo recurso da sua aplicação e uma tarefa que demanda muito processamento, pode comprometer a performance da sua aplicação como um todo.
Isso pode comprometer também a demanda de criação de uma nova instância, pois quando criamos essa instância, toda nossa aplicação é criada, incluindo todos os hosted services.
Show me the code
Para essa implementação, utilizarei o VS 2019, no entanto, sinta-se livre para utilizar a ferramenta que desejar.
Vamos criar um projeto ASP.NET Core Web Application e caso queira saber mais sobre o que é uma API e como utiliza-la, confira esse post.
Clique em Next, dê um nome ao seu projeto e escolha o template de API na versão 3.1 do ASP.NET Core, conforme mostra a imagem abaixo
Com nosso projeto criado, vamos agora adicionar uma pasta com o nome Hosted Service e uma classe com o nome TimerHostedService, sinta-se livre para definir o nome que achar melhor.
Em nosso exemplo, vamos utilizar uma rotina de processamento que vai ser disparada de 5 em 5 segundos.
Na classe TimerHostedService, vamos implementar o seguinte código
Para rodar as rotinas (tasks) em segundo plano é necessário utilizar a interface IHostedService.
A interface IHostedService nos obriga a implementar dois métodos StartAsync e StopAsync. O método StartAsync é chamado assim que a aplicação inicia e o StopAsync é quando a aplicação está parando sua execução.
Dentro do nosso Timer, definimos o intervalo de tempo entre cada execução (5 em 5 segundos) e passamos o método ExecuteProcess para ser executado a cada iteração.
Com isso, finalizamos a implementação do HostedService, agora é necessário registra-lo no Startup (Startup.cs) da aplicação para que ele posso ser executado.
Agora temos nosso Hosted Service devidamente configurado e pronto para execução.
Ao executar nossa aplicação, além de subir nosso projeto de API, é iniciado também nosso serviço em background, conforme imagem abaixo.
Ficou com dúvida? Deixe nos comentários
Até mais.
Link do projeto: https://github.com/reniciuspagotto/hosted-service-demo