Background Services com o Hosted Service — ASP.NET Core

Renicius Pagotto Fostaini
3 min readJun 10, 2020

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

Sign up to discover human stories that deepen your understanding of the world.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Renicius Pagotto Fostaini
Renicius Pagotto Fostaini

Written by Renicius Pagotto Fostaini

Solutions Architect | Speaker | Community Manager

Responses (2)

Write a response

muito top! acho que vai me ajudar bastante. Estou fazendo uma solução usando azure bus para entrega na fiap. Agora o MassTransit é uma estrategia melhor saberia dizer a diferença ?

Olá Renicius,
Gostaria saber se poderia disponibilizar um modelo, onde por exemplo consome um serviço que dispara o envio de e-mail.