
O Coravel ajuda os desenvolvedores a obter seus aplicativos .NET em funcionamento rapidamente, criando recursos avançados de aplicativos, como agendamento de tarefas/empregos, filas, cache, correspondência (e muito mais!) Acessível e fácil de usar. Vem com sintaxe simples, expressiva e direta.
Você pode ver os documentos oficiais aqui.

Geralmente, você deve configurar um trabalho cron ou uma tarefa via agendador de tarefas do Windows para obter uma única ou múltipla tarefas recorrentes para executar.
Com o Coravel, você pode configurar todas as suas tarefas programadas em um só lugar usando uma sintaxe simples, elegante e fluente - no código!
O Coravel oferece uma fila de configuração zero que executa na memória para descarregar tarefas longas para o plano de fundo, em vez de fazer com que seus usuários aguardem a solicitação HTTP concluída!
O Coravel fornece uma API fácil de usar para armazenamento em cache em seus aplicativos .NET Core.
Por padrão, ele usa um cache na memória, mas também possui drivers de banco de dados para cenários mais robustos!
A transmissão de eventos da Coravel ajuda você a criar aplicativos sustentáveis, cuja peças são vagamente acopladas!
Os e-mails não são tão fáceis quanto deveriam. Felizmente para você, o Coravel resolve isso oferecendo:
appsettings.jsonVocê pode apoiar meu trabalho contínuo de código aberto no BuyMeacoffee.
Veja a rapidez com que você pode usar o Coravel para começar a criar um processo básico de serviço do trabalhador que pode emitir ações em intervalos agendados:
dotnet new worker -n [NameOfYourApp] -o ./[NameOfYourApp]dotnet add package coravelProgram.cs pelo seguinte: using Coravel ;
Console . OutputEncoding = System . Text . Encoding . UTF8 ;
var builder = Host . CreateApplicationBuilder ( args ) ;
builder . Services . AddScheduler ( ) ;
var host = builder . Build ( ) ;
host . Services . UseScheduler ( s =>
{
s . Schedule ( ( ) => Console . WriteLine ( "It's alive! ?" ) ) . EverySecond ( ) ;
} ) ;
host . Run ( ) ;dotnet runÉ isso - feliz codificação!
Se você estiver construindo um aplicativo .NET com a estrutura da entidade, convém procurar no Coravel Pro. É um painel de administração e ferramentas para fazer a manutenção e o gerenciamento do aplicativo .NET A Breeze!
O Hangfire já existe há algum tempo - antes do moderno .NET (núcleo). É uma ferramenta fantástica que possui toneladas de recursos que o Coravel não tem. Notavelmente: filas persistentes, mecanismos de tentativa, suporte para muitos motoristas de armazenamento, etc.
No entanto, o Hangfire Still (em março de 2023) não suporta nativamente as verdadeiras async/await (aqui e aqui). Isso significa que o uso do HangFire em um aplicativo da Web, por exemplo, não será tão eficiente quanto poderia ser ao usar threads que executam operações de E/S.
O Coravel foi criado com as primitivas modernas C# e .NET em mente - como as utilidades de injeção de dependência async/await e .NET. Isso significa que o Coravel pode ser mais fácil de configurar e será muito eficiente com / não HOG Threads que seu aplicativo da Web precisa responder às solicitações HTTP recebidas.
O quartzo é uma biblioteca Java mais antiga portada para .NET. Ainda não se conecta à moderna ferramenta de injeção de dependência .NET. Alguns pensam que as APIs de Coravel são muito mais sucintas e compreensíveis.
Por exemplo, compare esta amostra com a documentação com o trabalho com o Coravel (por exemplo, você não precisa entender como "iniciar" e "parar" o agendador do Coravel, mas precisa trabalhar manualmente com o agendador de quartzo).
Não. Pelo menos, ainda não.
O Coravel processa itens na fila na memória. Quando o seu aplicativo desce, ele não permitirá que o aplicativo seja desligado até que todos os itens sejam processados.
A filosofia da Coravel tem sido trabalhar bem com outras primitivas .NET - o que significa que o uso de outras bibliotecas é fácil.
O Coravel não suporta mecanismos de tentativa internamente, porque tenho muito cuidado para não inchaço de coravel com coisas que não são necessárias. Quero manter o Coravel focado no que faz de melhor (por exemplo, "preciso de agendamento de empregos, filas etc. sem exigir infraestrutura extra e configuração complicada").
Por exemplo, você pode usar o Polly em seus invocáveis para fazer tentativas. Algumas pessoas configuram uma classe base que herda do IInvocable que tem tentativas embutidas.
Não. No entanto, isso pode ser alcançado novamente usando uma biblioteca de travamento distribuída testada por batalha como o DistributedLock. Você pode criar um Invoke() como este:
public class TestInvocable : IInvocable
{
private ApplicationDbContext _context ;
private IDistributedLockProvider _distributedlock ;
public TestInvocable ( ApplicationDbContext context , IDistributedLockProvider distributedlock )
{
this . _context = context ;
this . _distributedlock = distributedlock ;
}
public async Task Invoke ( )
{
await using ( await this . _distributedlock . AcquireAsync ( ) )
{
await this . _context . Test . AddAsync ( new TestModel ( ) { Name = "test name" } ) ;
await this . _context . SaveChangesAsync ( ) ;
}
}
}