最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET Core使用Quartz的實現(xiàn)示例

 更新時間:2026年01月12日 10:05:18   作者:Yashar Qian  
本文介紹了在.NET Core中使用Quartz.NET進行任務(wù)調(diào)度的完整流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在 .NET Core 中使用 Quartz.NET 可以分為以下幾個主要步驟:

1. 安裝 NuGet 包

dotnet add package Quartz
dotnet add package Quartz.Extensions.Hosting

2. 配置服務(wù)

Program.csStartup.cs 中配置 Quartz:

.NET 6+ 使用 Minimal API:

var builder = WebApplication.CreateBuilder(args);

// 添加 Quartz 服務(wù)
builder.Services.AddQuartz(q =>
{
    // 可選:配置 Quartz 選項
    q.UseMicrosoftDependencyInjectionJobFactory();
    
    // 創(chuàng)建作業(yè)鍵
    var jobKey = new JobKey("HelloWorldJob");
    
    // 注冊作業(yè)
    q.AddJob<HelloWorldJob>(opts => opts.WithIdentity(jobKey));
    
    // 創(chuàng)建觸發(fā)器
    q.AddTrigger(opts => opts
        .ForJob(jobKey)
        .WithIdentity("HelloWorldJob-trigger")
        .WithCronSchedule("0/5 * * * * ?")); // 每5秒執(zhí)行一次
});

// 添加 Quartz 托管服務(wù)
builder.Services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);

var app = builder.Build();
app.Run();

傳統(tǒng)配置方式:

public void ConfigureServices(IServiceCollection services)
{
    services.AddQuartz(q =>
    {
        q.UseMicrosoftDependencyInjectionJobFactory();
        
        var jobKey = new JobKey("HelloWorldJob");
        q.AddJob<HelloWorldJob>(opts => opts.WithIdentity(jobKey));
        
        q.AddTrigger(opts => opts
            .ForJob(jobKey)
            .WithIdentity("HelloWorldJob-trigger")
            .WithCronSchedule("0 0/5 * * * ?")); // 每5分鐘執(zhí)行一次
    });

    services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);
}

3. 創(chuàng)建作業(yè)

創(chuàng)建實現(xiàn) IJob 接口的作業(yè)類:

using Quartz;

public class HelloWorldJob : IJob
{
    private readonly ILogger<HelloWorldJob> _logger;

    public HelloWorldJob(ILogger<HelloWorldJob> logger)
    {
        _logger = logger;
    }

    public async Task Execute(IJobExecutionContext context)
    {
        _logger.LogInformation("HelloWorldJob 執(zhí)行于: {Time}", DateTime.Now);
        
        // 你的業(yè)務(wù)邏輯
        await Task.Delay(1000);
        
        _logger.LogInformation("HelloWorldJob 完成于: {Time}", DateTime.Now);
    }
}

4. 使用依賴注入的作業(yè)

如果你的作業(yè)需要其他服務(wù),可以通過構(gòu)造函數(shù)注入:

public class EmailJob : IJob
{
    private readonly IEmailService _emailService;
    private readonly ILogger<EmailJob> _logger;

    public EmailJob(IEmailService emailService, ILogger<EmailJob> logger)
    {
        _emailService = emailService;
        _logger = logger;
    }

    public async Task Execute(IJobExecutionContext context)
    {
        try
        {
            // 從 JobDataMap 獲取參數(shù)
            var toEmail = context.JobDetail.JobDataMap.GetString("ToEmail");
            var subject = context.JobDetail.JobDataMap.GetString("Subject");
            
            await _emailService.SendAsync(toEmail, subject, "Hello from Quartz!");
            _logger.LogInformation("郵件發(fā)送成功");
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "郵件發(fā)送失敗");
        }
    }
}

5. 配置多個作業(yè)和觸發(fā)器

services.AddQuartz(q =>
{
    // 作業(yè)1:每5分鐘執(zhí)行
    var jobKey1 = new JobKey("ReportJob");
    q.AddJob<ReportJob>(opts => opts.WithIdentity(jobKey1));
    q.AddTrigger(opts => opts
        .ForJob(jobKey1)
        .WithIdentity("ReportJob-trigger")
        .WithCronSchedule("0 0/5 * * * ?"));
    
    // 作業(yè)2:每天凌晨2點執(zhí)行
    var jobKey2 = new JobKey("CleanupJob");
    q.AddJob<CleanupJob>(opts => opts.WithIdentity(jobKey2));
    q.AddTrigger(opts => opts
        .ForJob(jobKey2)
        .WithIdentity("CleanupJob-trigger")
        .WithCronSchedule("0 0 2 * * ?"));
    
    // 作業(yè)3:簡單的間隔調(diào)度
    var jobKey3 = new JobKey("HealthCheckJob");
    q.AddJob<HealthCheckJob>(opts => opts.WithIdentity(jobKey3));
    q.AddTrigger(opts => opts
        .ForJob(jobKey3)
        .WithIdentity("HealthCheckJob-trigger")
        .StartNow()
        .WithSimpleSchedule(x => x
            .WithIntervalInSeconds(30)
            .RepeatForever()));
});

6. 使用配置文件

appsettings.json 中配置:

{
  "Quartz": {
    "scheduler": {
      "instanceName": "MyScheduler"
    },
    "threadPool": {
      "type": "Quartz.Simpl.SimpleThreadPool, Quartz",
      "threadCount": 10
    },
    "jobStore": {
      "type": "Quartz.Simpl.RAMJobStore, Quartz"
    }
  }
}

7. 動態(tài)調(diào)度作業(yè)

你也可以在運行時動態(tài)調(diào)度作業(yè):

public class JobSchedulerService
{
    private readonly ISchedulerFactory _schedulerFactory;

    public JobSchedulerService(ISchedulerFactory schedulerFactory)
    {
        _schedulerFactory = schedulerFactory;
    }

    public async Task ScheduleOneTimeJob<T>(DateTimeOffset startTime) where T : IJob
    {
        var scheduler = await _schedulerFactory.GetScheduler();
        
        var job = JobBuilder.Create<T>()
            .WithIdentity(Guid.NewGuid().ToString())
            .Build();
            
        var trigger = TriggerBuilder.Create()
            .WithIdentity(Guid.NewGuid().ToString())
            .StartAt(startTime)
            .Build();
            
        await scheduler.ScheduleJob(job, trigger);
    }
}

常用 Cron 表達式示例

  • "0 0/5 * * * ?" - 每5分鐘
  • "0 0 * * * ?" - 每小時
  • "0 0 2 * * ?" - 每天凌晨2點
  • "0 0 9 ? * MON-FRI" - 工作日早上9點
  • "0 30 9 ? * MON" - 每周一早上9:30

這樣你就完成了在 .NET Core 中集成和使用 Quartz.NET 的基本配置。記得根據(jù)你的具體需求調(diào)整作業(yè)邏輯和調(diào)度策略。

到此這篇關(guān)于.NET Core使用Quartz的實現(xiàn)示例的文章就介紹到這了,更多相關(guān).NET Core Quartz內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

浦北县| 营山县| 宁津县| 侯马市| 延川县| 大连市| 舒城县| 碌曲县| 策勒县| 南江县| 栾城县| 家居| 青铜峡市| 怀仁县| 黑水县| 德化县| 湘潭县| 紫云| 兴海县| 金门县| 宣恩县| 鸡东县| 新野县| 礼泉县| 建平县| 万载县| 洪雅县| 宁安市| 信阳市| 泾源县| 灯塔市| 西青区| 酉阳| 中宁县| 秦皇岛市| 景泰县| 本溪市| 侯马市| 塘沽区| 泾源县| 青海省|