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/。