C#中Quartz的使用

  • 安装 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#索引器简单实例代码

    接下来我将为你详细讲解“C#索引器简单实例代码”的完整攻略。 1. 什么是C#索引器 C#索引器(indexer)是一种特殊的属性,允许类或结构中的对象通过类似于数组的方式进行索引和访问。可以理解为是类内部的一种自定义“数组”。声明一个索引器需要使用 this 关键字,接着在中括号内指定索引参数的数据类型。例如: public class MyClass {…

    C# 2023年6月3日
    00
  • ASP.NET MVC 控制器与视图

    下面来介绍 ASP.NET MVC 控制器和视图,以下内容将涉及到 MVC 的基础知识、控制器与视图的概念、功能和使用方法,同时提供两个示例说明以加深理解。 什么是 ASP.NET MVC 框架? ASP.NET MVC 框架是微软推出的一种用于构建 Web 应用程序的设计模式,其主要思想是将应用程序分为三个部分:模型(Model)、视图(View)和控制器…

    C# 2023年6月3日
    00
  • JS正则替换去空格的方法

    JS正则替换去空格的方法可以通过正则表达式的特性,通过匹配空格符并替换为空字符来实现。具体步骤如下: 使用正则表达式创建一个匹配空格的模式。空格包括空格符、制表符、换行符等。 javascript var regex = /\s+/g; 在这个例子中,使用 \s+ 来匹配一个或多个空格符,选用全局匹配模式 g,可以匹配整个文本。 通过 string.repl…

    C# 2023年6月8日
    00
  • C# 9 新特性之增强的foreach详解

    C# 9 新特性之增强的 foreach 详解 简介 在 C# 9 中,foreach 循环得到了一些增强,包括更好的性能,支持使用 ref 局部变量以及对 IAsyncEnumerable 类型的异步迭代支持。 更好的性能 在 C# 9 中,foreach 的性能得到了提升。它会通过对枚举器对象的优化,减少一些额外的开销,以获得更好的性能。 ref 局部变…

    C# 2023年6月6日
    00
  • C#简单爬虫案例分享

    下面我将为你详细讲解有关“C#简单爬虫案例分享”的完整攻略。 1. 爬虫原理 爬虫是指程序自动化地访问互联网资源并提取信息。其基本原理是通过HTTP请求,获取服务器返回的HTML页面,并解析其中的内容进行采集、处理和格式化。通常,爬虫程序的实现过程可以分为以下几个步骤: 发送HTTP请求,并获取服务器返回的HTML页面。 解析HTML页面中的内容,识别其中的…

    C# 2023年6月1日
    00
  • C#在后台运行操作(BackgroundWorker用法)示例分享

    接下来我将详细讲解如何在C#中使用BackgroundWorker来实现后台运行操作。 BackgroundWorker简介 BackgroundWorker是一个轻量级的组件,可以用于让一些耗时的操作在后台线程中执行,而不会阻塞用户界面。它是多线程编程中常用的一种方式。 BackgroundWorker有三个主要事件:DoWork事件、ProgressCh…

    C# 2023年5月15日
    00
  • .net连接oracle的3种实现方法

    下面我将详细讲解“.net连接oracle的3种实现方法”的完整攻略。 1. 前言 在使用 C# 进行开发的过程中,我们常常需要连接数据库进行数据的存储、查询和更新等操作。Oracle 数据库是一个非常常见的数据库,以其高效、安全和可靠的特性被广泛使用。而 .NET 作为一种快速高效的编程语言,也能轻松连接到 Oracle 数据库。 本文将介绍 .NET 连…

    C# 2023年6月3日
    00
  • C#去除DataTable重复数据的三种方法

    标题:C#去除DataTable重复数据的三种方法 方法一:使用Linq去重 步骤: 1.将DataTable转换为IEnumerable对象; 2.使用Linq的Distinct方法去重; 3.将结果转换为DataTable对象。 示例: DataTable table = new DataTable(); // 假设table中包含重复数据 IEnume…

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