C#中Quartz的使用

这篇具有很好参考价值的文章主要介绍了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();

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

  • 本机系统时间调整会影响Quartz的执行,因为Quartz的时间与系统时间对应。
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = await schedulerFactory.GetScheduler();
IJobDetail job = JobBuilder.Create<MyJob>()
    .WithIdentity("job1", "group1")
    .WithMisfireHandlingInstructionFireAndProceed()
    .StartNow()
    .Build();

await scheduler.ScheduleJob(job, trigger);

WithMisfireHandlingInstructionFireAndProceed 是一个 Quartz.NET 中的 JobBuilder 的方法,它指定任务(Job)的 misfire 策略为“错过后立即执行”,即当任务错过预定的执行时间时,立即执行一次任务,而不是等待下一个执行时间。

在 Quartz.NET 中,当一个触发器(Trigger)被触发,但是任务由于某些原因没有及时启动,就会产生一个 misfire。misfire 策略用于指定 Quartz.NET 该如何处理这种 misfire。

在 JobBuilder 中,WithMisfireHandlingInstructionFireAndProceed 方法用于设置一个任务的 misfire 策略。使用此方法可以避免程序出现较大的延迟,保证任务能够及时执行。文章来源地址https://www.toymoban.com/news/detail-413114.html

到了这里,关于C#中Quartz的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在 Visual Studio Code 中同时打开多个项目?

    在日常的软件开发中,我们经常需要同时处理多个项目。Visual Studio Code(简称 VS Code)是一个流行的开发环境,提供了许多便捷的功能来支持多项目的管理和开发。本文将介绍如何在 VS Code 中同时打开多个项目,并提供相应的源代码示例。 打开 VS Code 并创建一个新窗口。 点击

    2024年02月05日
    浏览(71)
  • Visual studio 打开项目MSBuild版本过低问题分析与解决

    一、背景        使用Visual stduio 2019版本打开某个项目,出现MSBuild版本不兼容问题,下图就是实际报错: 二、问题分析         1、示例程序使用的.net sdk版本 6.0.316 ,目标MSBuild版本17.0.0,当前可以用的MSBuild版本16.11.2.50704,也就是版本过低; 三、问题解决         1、按

    2024年02月04日
    浏览(48)
  • UE4无法编译项目。是否要在Visual Studio中打开

    一开始是没装Visual Studio。安装完成后想创建C++项目出现如下报错。 无法编译该项目。要在Visual Studio中打开它吗? Running E:/Epic Games/UE_4.27/Engine/Binaries/DotNET/UnrealBuildTool.exe Development Win64 -Project=\\\"E:/Epic Games/UE_4.27/UnrealProjects/我的项目4/我的项目4.uproject\\\" -TargetType=Editor -Progress -NoE

    2024年02月03日
    浏览(58)
  • Visual Studio更改并下载.Net Framework目标框架以及Nuget包下载

    🌀当使用.net进行开发时,开发的项目与.net framework目标框架会非常密切相关的,所以当vs本地使用的.net framework框架与该项目工程的框架不一致的时候,就可能打开不了当前项目,解决这个问题的方法有: 第一种:要更改目标框架以适应当前VS的; 第二种:或者根据目标框架

    2024年02月05日
    浏览(59)
  • 利用Visual Studio新建一个C# Web项目

    首先就是要下载Visual Studio,具体可以登录官网查看下载教程。 首次打开Visual Studio,就会显示新建的页面,若是使用过的则根据以下操作进行:  以下界面则与新使用的新建界面一致:选择 ASP.NET Web ,点击下一步 填写项目名称,选择项目存放的位置,选择框架,点击创建  

    2023年04月08日
    浏览(89)
  • 删除鼠标右键“使用Visual Studio打开”

    下载Visual Studio后发现鼠标右键出现了“ 使用Visual Studio打开 ” win+R 运行打开regedit,打开注册表 找到 HKEY_CLASSES_ROOTDirectorybackgroundshellAnyCode HKEY_CLASSES_ROOTDirectoryshellAnyCode 把这两个注册表项删除,若不放心可先保存导出,再删除 如下图 删除后鼠标右键 转自: http://t.zouk

    2024年02月11日
    浏览(62)
  • Visual Studio将C#项目编译成EXE可执行程序

    经常看文章时会收获不少实用工具,有的在github上是编译好的,有的则是未编译的项目文件。所以经常会使用Visual Studio编译项目文件成exe可执行程序,以下为编译的流程。 第一步,从github上下载项目文件,举个例子,如工具SharpWifiGrabber SharpWifiGrabber https://github.com/r3nhat/Shar

    2024年02月07日
    浏览(48)
  • Visual Studio安装及无法打开包括文件: “crtdbg.h”问题解决

    目录 第一部分: Visual Studio安装参考文章 第二部分: Visual Studio无法打开包括文件: “crtdbg.h”问题解决参考文章 https://blog.csdn.net/ccSnown/article/details/120464479 https://blog.csdn.net/ccSnown/article/details/120464479 https://blog.csdn.net/yanchenyu365/article/details/122165277 https://blog.csdn.net/yanchenyu365/ar

    2024年02月05日
    浏览(54)
  • Visual Studio关于C#项目Dll的引用几种方式

    右键“引用”,点击“添加引用”(Net Framework项目) 或者右键“依赖项”,点击“添加项目引用” 打开“引用管理器”窗口,切换到“项目”一栏 在右侧列表中,勾选需要引用的项目,然后点击确定 推荐在解决方案文件夹下创建一个专门的文件夹用于存放外部引用的dll 右

    2024年02月02日
    浏览(44)
  • VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)

            出于某种目的(合法的,真的合法的,合同上明确指出可以这样做),我准备了一个重命名所有标识符的VS扩展,用来把一个C#库改头换面,在简单的测试项目上工作很满意,所有标识符都被准确替换。我还尝试用在C++项目上,问题就比较多了,因为VS并不能准确识别

    2024年02月05日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包