C#中Quartz的使用

yizhihongxing
  • 安装 NuGet 包:在 Visual Studio 中打开项目,右键单击项目名称,选择“管理 NuGet 包”,搜索“Quartz”并安装。

  • 创建作业:创建一个实现了 IJob 接口的类,该接口包含一个 Execute 方法,该方法将在作业运行时调用。例如:

    public class MyJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            Console.WriteLine("Hello, world!");
            return Task.CompletedTask;
        }
    }
  • 给Job传递数据:

    // 创建一个JobDataMap对象
    JobDataMap jobDataMap = new JobDataMap();
    
    // 向JobDataMap中添加参数
    jobDataMap.Add("param1", "Hello");
    jobDataMap.Add("param2", "World");
    
    // 创建一个JobDetail对象,设置JobDataMap
    JobDetail jobDetail = JobBuilder.Create<MyJob>()
        .UsingJobData(jobDataMap)
        .Build();
    
    // 在Job类中获取参数
    public class MyJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            JobDataMap jobDataMap = context.JobDetail.JobDataMap;
            string param1 = jobDataMap.GetString("param1");
            string param2 = jobDataMap.GetString("param2");
    
            Console.WriteLine("{0} {1}", param1, param2);
        }
    }

    注意:每次执行job时,都会创建一个新的job对象,并将JobDataMap中的数据传递给它。这意味着,即使您在job中存储了一些状态或数据,它们也不会在下一次执行job时保留。

  • 创建触发器:创建一个触发器来指定何时运行作业。例如,以下触发器将在每天上午 10 点运行作业:

 

ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .WithDailyTimeIntervalSchedule(
        x => x.OnEveryDay()
              .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(10, 0))
    )
    .Build();

    也可以不使用WithDailyTimeIntervalSchedule,使用WithCronSchedule,例如:下面是每天9点触发

.WithCronSchedule(cron) //"0 0 9 * * ?"

 

 

     这个表达式的含义是:

 

    • 第一字段:0,表示秒数为0。
    • 第二字段:0,表示分钟数为0。
    • 第三字段:14,表示小时数为14,即下午2点。
    • 第四字段:*,表示每天都匹配。
    • 第五字段:*,表示每月都匹配。
    • 第六字段:?,表示不指定星期几。
    • 第七字段:未使用。
  • 创建调度器:使用 StdSchedulerFactory 创建调度器,并将作业和触发器添加到调度器中:

ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = await schedulerFactory.GetScheduler();
IJobDetail job = JobBuilder.Create<MyJob>()
    .WithIdentity("job1", "group1")
.StartNow() .Build();
await scheduler.ScheduleJob(job, trigger);

   使用 StartNow() 方法来立即开始执行任务。这样,不管调度程序是在什么时候创建的,任务调度都会立即执行一次(不是job执行,任务调度执行是指如果我设了早上9点钟的触发器,现在是早上8点钟创建的任务调度,那今天的9点就不会执行,需要到明天的9点才执行;现在设了StartNow后,今天9点就会执行job了),并在之后按照调度规则继续执行。

  • 运行作业:调用 Start 方法启动调度器,使作业按照指定的触发器运行:

    await scheduler.Start();

    注意:这里只是启动调度器,并不会立刻执行作业,需要触发器触发才会执行。

 

原文链接:https://www.cnblogs.com/log9527blog/p/17318118.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中Quartz的使用 - Python技术站

(0)
上一篇 2023年4月22日
下一篇 2023年4月22日

相关文章

  • C#检测是否有危险字符的SQL字符串过滤方法

    为了防止SQL注入等安全问题,我们需要对用户输入的数据进行安全过滤。下面是一个利用C#实现检测是否有危险字符的SQL字符串过滤方法的完整攻略。 第一步:准备过滤规则 我们需要先定义一些危险字符的规则,用于检测用户输入的字符串是否包含这些危险字符。以下是一些常用的规则: static readonly string[] DangerousStrings = {…

    C# 2023年6月8日
    00
  • asp.net下比较两个等长字符串是否含有完全相同字符(忽略字符顺序)

    要在ASP.NET下比较两个等长字符串是否含有完全相同的字符(忽略字符顺序),一种方法是对每个字符串进行排序,然后将结果进行比较。下面是具体的步骤。 第一步:定义比较函数 首先,我们需要定义一个比较函数。这个函数用于对字符串进行排序,并将排序结果作为函数的返回值。 public string SortString(string s) { char[] ca …

    C# 2023年6月7日
    00
  • 基于Jenkins搭建.NET Core持续集成环境过程图解

    基于Jenkins搭建.NET Core持续集成环境过程图解 Jenkins是一个开源的自动化构建工具,可以用于构建、测试和部署软件。在本攻略中,我们将介绍如何使用Jenkins搭建.NET Core持续集成环境,并提供两个示例说明。 步骤一:安装Jenkins 安装Java Jenkins是基于Java开发的,因此需要先安装Java。可以从官方网站下载Ja…

    C# 2023年5月16日
    00
  • C#中if语句使用概述

    下面是“C#中if语句使用概述”的详细攻略: 1. if语句概述 if语句是一个条件语句,它根据指定的条件执行一个或多个语句。在C#中,if语句的一般形式如下: if (condition) { // code block to be executed if the condition is true } 其中,condition是用于测试的表达式或变量,如…

    C# 2023年5月15日
    00
  • 基于NVelocity的几种内容生成方式汇总

    NVelocity是一种基于Java的模板引擎,它可以将模板和数据合并生成最终的文本内容。在使用NVelocity时,可以采用多种方式生成内容,包括使用模板文件、使用字符串模板、使用代码生成等。本文将提供基于NVelocity的几种内容生成方式的完整攻略,包括安装NVelocity、创建模板文件、使用字符串模板、使用代码生成等。同时,本文还提供两个示例,演示…

    C# 2023年5月15日
    00
  • .Net Core 配置文件读取IOptions,IOptionsMonitor,IOptionsSnapshot

    当我们在 .NET Core 应用程序中需要读取配置文件时,可以使用 IOptions、IOptionsMonitor 和 IOptionsSnapshot 接口。这些接口提供了不同的方式来读取配置文件,并且可以根据需要自动更新配置值。 以下是详细的攻略: 步骤1:创建配置文件 在项目中创建一个名为 appsettings.json 的配置文件,并添加以下内…

    C# 2023年5月12日
    00
  • ASP.NET 跨页面传值方法

    ASP.NET 跨页面传值通常有以下几种方式: 1. QueryString传值 QueryString 是一种将数据以键值对的方式传递到下一个页面的方式。我们通常将值附加到页面 URL 的末尾,并将它们作为该页的参数传递。例如,我们有两个页面 Page1.aspx 和 Page2.aspx,我们可以通过向 Page2.aspx 的 URL 添加参数,来将 …

    C# 2023年6月3日
    00
  • c#字符串使用正则表达式示例

    下面是c#字符串使用正则表达式的完整攻略: 1. 使用正则表达式匹配字符串 使用c#中的正则表达式需要使用System.Text.RegularExpressions命名空间。下面是一个示例代码,其使用正则表达式匹配字符串,并将匹配到的结果输出到控制台: using System; using System.Text.RegularExpressions; …

    C# 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部