Coravel : .NET 轻量级任务调度与后台任务处理

Coravel 是一个专为 .NET 应用设计的轻量级后台任务框架,无需复杂配置即可实现任务调度、队列处理、缓存管理、事件广播等功能。

入门指南

通过NuGet 安装或者Coravel CLI安装或者编辑.csproj文件

dotnet add package Coravel

基础功能概览

Coravel 的核心设计是与 .NET Core 的依赖注入(DI)系统无缝集成,配置非常简单。

1. 定时任务调度(Scheduler)

public class MyScheduledTask : IScheduledTask
{
    public async Task ExecuteAsync(CancellationToken cancellationToken = default)
    {
        Console.WriteLine(#34;执行任务时间:{DateTime.Now}");
        await Task.CompletedTask;
    }
}

注册服务和调度器:

// Program.cs (.NET 6/7/8)
builder.Services.AddScheduler();
builder.Services.AddTransient<MyScheduledTask>();

var app = builder.Build();

app.Services.UseScheduler(scheduler =>
{
    scheduler
        .Schedule<MyScheduledTask>()
        .EveryTenSeconds(); // 每10秒执行
});

2. 队列任务(Queue)

队列处理器

public class MyQueuedJob
{
    public async Task DoWork()
    {
        Console.WriteLine(#34;后台任务开始 {DateTime.Now}");
        await Task.Delay(1000);
        Console.WriteLine(#34;后台任务结束 {DateTime.Now}");
    }
}

注册并使用

builder.Services.AddQueue();
builder.Services.AddTransient<MyQueuedJob>();

var app = builder.Build();

var queue = app.Services.GetRequiredService<IQueue>();
queue.QueueAsyncTask(async serviceProvider =>
{
    var job = serviceProvider.GetRequiredService<MyQueuedJob>();
    await job.DoWork();
});

3. 事件广播(Event Broadcasting)

定义事件

public class UserRegistered
{
    public string UserName { get; set; }
}

定义监听器

public class SendWelcomeEmail : IListener<UserRegistered>
{
    public Task HandleAsync(UserRegistered @event)
    {
        Console.WriteLine(#34;发送欢迎邮件给用户:{@event.UserName}");
        return Task.CompletedTask;
    }
}

注册和触发

builder.Services.AddDispatcher();
builder.Services.AddTransient<SendWelcomeEmail>();

var app = builder.Build();

var dispatcher = app.Services.GetRequiredService<IDispatcher>();
await dispatcher.Broadcast(new UserRegistered { UserName = "zhangsan" });

4. 缓存(Cache)

Coravel 提供简易的内存缓存

builder.Services.AddCache();

var cache = app.Services.GetRequiredService<ICache>();

await cache.PutAsync("token", "abcdef", TimeSpan.FromMinutes(10));

string token = await cache.GetAsync<string>("token");
Console.WriteLine(#34;缓存的token是:{token}");

官方资源

  • o 官网文档:https://docs.coravel.net
  • o GitHub:https://github.com/jamesmh/coravel

最后

今天这篇分享就到这里啦,如果你也有更多有趣的发现或自荐,欢迎关注我公众号,并通过后台私信(向我的公众号发消息)告诉我~

一定记得关注关注关注!

原文链接:,转发请注明来源!