Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 6049|Resposta: 4

[Fonte] ASP.NET Core (dezenove) usa o BackgroundService para executar tarefas em segundo plano

[Copiar link]
Postado em 20-05-2023 22:51:51 | | | |
Requisitos: Uma fila de log estática é definida no projeto, e cada requisição pode colocar mensagens na fila, e precisamos que o site abra uma tarefa em segundo plano para processar as mensagens dessa fila.

Revisar:

Um serviço baseado no .NET Core no Linux
https://www.itsvse.com/thread-9447-1-1.html
Interface IHostedService

A interface IHostedService define dois métodos para objetos hospedados:

StartAsync(CancellationToken): A lógica usada para iniciar tarefas em segundo plano.
StopAsync(CancellationToken): Acionado quando o host realiza um desligamento normal, contendo a lógica para encerrar tarefas em segundo plano.

Classe base de serviço

BackgroundService é a classe base usada para implementar o IHostedService de longa duração, cujo endereço de código-fonte:O login do hiperlink está visível.



Chame ExecuteAsync(CancellationToken) para executar o serviço em segundo plano. A implementação retorna uma Tarefa que representa toda a vida útil do serviço em segundo plano. Nenhum outro serviço é iniciado até que o ExecuteAsync se torne assíncrono, como chamando await. Evite realizar tarefas longas de inicialização bloqueando no ExecuteAsync. StopAsync (CancellationToken) aguardando o ExecuteAsync ser concluído.

Implementamos uma tarefa em segundo plano para imprimir o log em um loop, cujo código é o seguinte:

Registre-se no serviço de serviço com o seguinte código:

O modo de registro é singleton, como mostrado na figura abaixo:



Comece o projeto com o resultado da seguinte forma:



Use um serviço com escopo em uma tarefa em segundo plano

Para usar um serviço com escopo no BackgroundService, crie um escopo. Por padrão, nenhum escopo é criado para serviços gerenciados. Se você usar um construtor diretamente para injetar um objeto com escopo, o erro é o seguinte:

Exceção não resolvida. System.AggregateException: Alguns serviços não podem ser construídos (Erro ao validar o descritor de serviço 'ServiceType: Microsoft.Extensions.Hosting.IHostedService Vida útil: Singleton ImplementaçãoTipo: WebApplication2.Worker.TestServiceHostedService': Não é possível consumir o serviço escopado 'WebApplication2.Worker.User' a partir de singleton ' Microsoft.Extensions.Hosting.IHostedService'.)
Precisamos modificar o código da seguinte forma:

Referência:O login do hiperlink está visível.

(Fim)





Anterior:OData – OData vs GraphQL
Próximo:Tutorial do Banco de Dados Embutido LiteDB para .NET
 Senhorio| Postado em 20-05-2023 22:52:45 |


revisar

ASP.NET Núcleo (18) Personalize um cache de saída simples do OutputCache
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) integra análise de desempenho de aplicações MiniProfile
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Núcleo (16) Dependente da injeção de serviços de registro dinâmico
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) usa HttpClient para enviar requisições HTTP
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (quatorze) é baseado no captcha de imagem SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) para determinar se é uma requisição Ajax ou não
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (doze) front-end JS, agrupamento e compressão de CSS
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET rota de endpoint Core (XI) adiciona middleware para exibir todos os serviços DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Explicação detalhada das prioridades de configuração no Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Explicação detalhada do middleware Middleware do Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Explicação detalhada do Middleware Core
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET dos parâmetros padrão da interface Swagger no Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Análise aprofundada do código-fonte do framework
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI obtém manualmente o método de injeção de objetos
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (cinco) é baseado em transações distribuídas CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Validação unificada do modelo ModelState do filtro Core(4)
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Criar instâncias dinamicamente usando ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Núcleo (2) Reiniciar a aplicação por código
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) usa cache Redis
https://www.itsvse.com/thread-9393-1-1.html
 Senhorio| Postado em 2023-5-29 20:29:45 |
Você pode substituir IServiceProvider por IServiceScopeFactory, e não há diferença entre os dois ao criar o CreateScope.
 Senhorio| Postado em 2023-8-2 19:13:00 |
Um novo temporizador no .NET 6, o PeriodicTimer, é usado
https://www.itsvse.com/thread-10637-1-1.html
 Senhorio| Postado em 2023-8-13 20:13:37 |
O StartAsync deveria ser limitado aMissões de curto prazo, porque o serviço de hospedagem éExecute na ordemalvoNenhum outro serviço é iniciado até que o StartAsync esteja completamente rodandoTarefas de longo prazo devem ser colocadas no ExecuteAsync

Referência:O login do hiperlink está visível.

Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com