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.
novoprojetovs2019

aspnetcore

nomeprojeto

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!