ASP.NET Core - Background Service
Background Services no .NET Core executam tarefas em segundo plano. Algo comum na vida de todo desenvolvedor.
Cenários
Um ótimo cenário para Background Service é escutar eventos do MessageQueue. Gerar arquivos de relatórios ou envio de e-mails.
IHostedService
Para rodar tasks em segundo plano no ASP.NET Core é necessário implementar a Interface IHostedService. Porém há uma implementação da própria Microsoft. É a classe abstrata BackgroundService.
Detalhes
O método StartAsync é chamado pelo HostedServiceExecutor assim que a aplicação inicia. Um CancellationTokenSource é criado e passado ao método StartAsync. Este CancellationTokenSource é armazenado em um campo privado.
ExecuteAsync, um método abstrato, portanto a classe que herdar deve obrigatóriamente implementar este método.
O StartAsync então deve retornar uma Task. Em caso de ser um processo CPU-Bound, pode retor um Task.CompletedTask.
O outro método definido pelo IHostedService é StopAsync. Este método é chamado quando a aplicação Web está sendo desligada. Assim é possivel aplicar alguma lógica antes da aplicação parar.
Cuidados
Background services merece cuidado, é um recurso que não deve usar em excesso. Eles compartilham os recursos do teu App Service e caso tua aplicação suba uma instância, todos os Background Services serão criados novamente.
É uma solução simples e atende cenários básicos. Como mandar um e-mail, gerar um relatório etc.
SHOW ME THE CODE
Abra o Visual Studio o crie um novo projeto ASP.NET Core.
Adicione uma nova pasta chamada BackgroundServices e adicione uma class chamada GeneratePdfService.cs.
Altere o conteúdo do arquivo:
É necessário alterar o Startup.cs para informar o ASP.NET que há um serviço background.
Conclusão
A implementação de um background service é muito fácil. Basta algumas linhas de código e estará criado.
Espero que este artigo tenha te ajudado. Qualquer duvida, deixe teu recado aqui!