Coravel 通过使高级应用程序功能(如任务/作业调度、排队、缓存、邮件(以及更多!))易于访问且易于使用,帮助开发人员快速启动并运行 .NET 应用程序。具有简单、富有表现力和直接的语法。
下面是简单的用法,通过注入Scheduler和在中间件中定义调度的实现,来完成简单的定时使用。
using Coravel;
var builder = WebApplication.CreateBuilder(args);
//注入
builder.Services.AddScheduler();
var app = builder.Build();
//使用中间件
app.Services.UseScheduler(scheduler =>
{
scheduler.Schedule(
() => Console.WriteLine("每隔两秒执行一次")
)
.EverySeconds(2);
});
关于调度使用的频次见下面的方法:
EverySecond() - 每秒运行任务
EveryFiveSeconds() - 每五秒运行任务
EveryTenSeconds() - 每十秒运行任务
EveryFifteenSeconds() - 每十五秒运行任务
EveryThirtySeconds() - 每三十秒运行任务
EverySeconds(3) - 每3秒运行任务
EveryMinute() - 每分钟运行任务
EveryFiveMinutes() - 每五分钟运行任务
EveryTenMinutes() - 每十分钟运行任务
EveryFifteenMinutes() - 每十五分钟运行任务
EveryThirtyMinutes() - 每三十分钟运行任务
Hourly() - 每小时运行任务
H ourlyAt(12) - 每小时的12分时运行任务
Daily() - 每天午夜运行任务
DailyAtHour(13) - 每天下午1点 UTC 运行任务
DailyAt(13, 30) - 每天下午1点30分 UTC 运行任务
Weekly() - 每周运行任务
Monthly() - 每月运行任务(在每月1日午夜运行)
Cron("* * * * *") - 使用 Cron 表达式运行任务
另外,还可以通过定义实现IInvocable接口的类来定义调度器的功能,这样解耦性更优雅一些。需要注意的是,无参构造的实现需要注入,有参则不需要。
using Coravel;
using Coravel.Invocable;
using Coravel.Scheduling.Schedule;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScheduler();
//这里只注入无参的Invocable类
builder.Services.AddTransient<MyInvocable2>();
var app = builder.Build();
app.Services.UseScheduler(scheduler =>
{
scheduler
.Schedule<MyInvocable2>()
.EverySeconds(2);
scheduler
.ScheduleWithParams<MyInvocable>(3)
.EverySeconds(3);
});
app.Run();
public class MyInvocable : IInvocable
{
readonly ILogger<MyInvocable> _logger;
readonly int _seconds;
public MyInvocable(ILogger<MyInvocable> logger, int seconds)
{
_logger = logger;
_seconds = seconds;
}
public Task Invoke()
{
_logger.LogInformation("***每隔{int}秒执行一次", _seconds);
return Task.CompletedTask;
}
}
public class MyInvocable2 : IInvocable
{
readonly ILogger<MyInvocable> _logger;
public MyInvocable2(ILogger<MyInvocable> logger)
{
_logger = logger;
}
public Task Invoke()
{
_logger.LogInformation("---每隔两秒执行一次");
return Task.CompletedTask;
}
}
Coravel调度简单,直接,一些轻量级的调度可以采用。关于更多的调度信息,可参考https://docs.coravel.net/Scheduler/。