Tarefas em em segundo plano é tarefa rotineira para qualquer desenvolvedor. Atualmente o .NET Core oferece diversas alternativas para tarefas em background. Veja neste artigo qual é a melhor para teu cenário.

Os problemas que você pode resolver usando Background Services provavelmente são semelhantes aos problemas que você atualmente resolve usando o Windows Services, Uma Console Application no Docker ou o WebJobs.

Este artigo vai explicar a diferença em essas abordagens.

ASP.NET Core Background Services

O Background Service implementa a interface IHostedService. Fornecendo uma boa maneira de iniciar adequadamente uma Task em segundo plano no ASP.NET Core. É um recurso que não deve usar em excesso. Pois compartilham os recursos do teu App Service e caso tua aplicação suba uma instância, todos os Background Services serão criados novamente. Porém em alguns cenários, é uma boa solução.

Pode ser utilizado para gerar uma planilha Excel ou um PDF quando um usuário solicitar. Atualizar conteúdos periodicamente, por exemplo o Cache.

WebJobs

Os WebJobs são semelhantes aos Background Services, pois são executados no mesmo App Service Plan do Azure, ou seja, compartilham recursos.

Os WebJobs são implementados separadamente em outro projeto. No entanto um dos grandes beneficios do Webjob em relação ao Background Service se dá ao fato que caso suba uma instancia, apenas a Web terá duas instancias, enquanto o Webjob não.

Windows Services

Os Windows Services são hospedados em outra infraestrutura. São implantados de forma independente e não têm nenhum vínculo com o ASP.NET. Mas isso também vem como negativo. Se você estiver usando PAAS no Azure, Google Cloud ou AWS, precisará de uma VM separada para hospedar seu Serviço Windows.

Escrevi um artigo sobre migrar Windows Services para Console com Docker.

Console com Docker

De maneira geral é a mesma situação que o Windows Service. São hospedados em outra infraestrutura. São implantados de forma independente e não têm nenhum vínculo com o ASP.NET. Porém não necessitam de uma VM. Há ganhos significativos no gerenciamento e publicação. Independência do ambiente e de tecnologias específicas de Cloud, como o Azure Functions e WebJobs do App Services. Há também independencia da Cloud, pode rodar em Azure, Google Cloud ou AWS.

Veja este artigo sobre como implementar este modelo: .NET Core - Console Application com Docker

Conclusão

Espero que este artigo te ajude a entender e escolher melhor o que irá utilizar para seu serviço em segundo plano.

Refências