首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我如何在Quartz.Net中的父作业中等待完成子作业

在Quartz.NET中,要在父作业中等待完成子作业,可以使用JobListenerTriggerListener来实现。以下是一个完整的示例,展示了如何使用JobListener来实现这一目标:

  1. 首先,创建一个JobListener实现,用于监听子作业的完成状态:
代码语言:csharp
复制
public class ChildJobListener : JobListenerSupport
{
    private readonly TaskCompletionSource<bool> _tcs;

    public ChildJobListener(TaskCompletionSource<bool> tcs)
    {
        _tcs = tcs;
    }

    public override Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
    {
        _tcs.SetResult(jobException == null);
        return Task.CompletedTask;
    }

    public override Task JobExecutionVetoed(IJobExecutionContext context, CancellationToken cancellationToken)
    {
        _tcs.SetResult(false);
        return Task.CompletedTask;
    }
}
  1. 在父作业中,使用TaskCompletionSource来等待子作业完成:
代码语言:csharp
复制
public class ParentJob : IJob
{
    private readonly IScheduler _scheduler;

    public ParentJob(IScheduler scheduler)
    {
        _scheduler = scheduler;
    }

    public async Task Execute(IJobExecutionContext context)
    {
        var tcs = new TaskCompletionSource<bool>();
        var childJobListener = new ChildJobListener(tcs);

        try
        {
            // 注册子作业监听器
            _scheduler.ListenerManager.AddJobListener(childJobListener);

            // 触发子作业
            var jobDataMap = new JobDataMap
            {
                // 传递子作业所需的参数
            };
            var trigger = TriggerBuilder.Create()
                .ForJob(nameof(ChildJob))
                .UsingJobData(jobDataMap)
                .StartNow()
                .Build();

            await _scheduler.ScheduleJob(trigger);

            // 等待子作业完成
            var isChildJobSuccessful = await tcs.Task;
            if (!isChildJobSuccessful)
            {
                // 处理子作业失败的情况
            }
        }
        finally
        {
            // 移除子作业监听器
            _scheduler.ListenerManager.RemoveJobListener(childJobListener.Name);
        }
    }
}
  1. 创建子作业类,实现IJob接口:
代码语言:csharp
复制
public class ChildJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        // 执行子作业逻辑
    }
}

通过这种方式,父作业可以等待子作业完成,并根据子作业的执行结果采取相应的操作。请注意,这个示例中的代码可能需要根据您的实际需求进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在父进程中读取子(外部)进程的标准输出和标准错误输出结果

最近接手一个小项目,要求使用谷歌的aapt.exe获取apk软件包中的信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程的输出结果,当时还研究了一番,只是没有做整理。...(转载请指明出于breaksoftware的csdn博客)         在信息化非常发达的今天,可能已经过了江湖“武侠”草莽的时代。仅凭一己之力想完成惊人的创举,可谓难上加难。...这个API的参数非常多,我想我们工程中对CreateProcess的调用可能就关注于程序路径(lpApplicationName),或者命令行(lpCommandLine)。...它是我们启动子进程时,控制子进程启动方式的参数。...我们之后将hWrite交给我们创建的子进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取子进程写入管道的内容。

3.9K10

【壹起学】1:Uwl.Admin开源框架基于QuartzNet的实现

/ Quartz.NET文档地址:https://www.quartz-scheduler.net/documentation/index.html Quartz.NET是一个开源的作业调度框架,是OpenSymphony...它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。...现在Quartz.NET3.0已支持Asp.Net Core,3.0新功能如下: 新功能 具有异步/等待支持的基于任务的作业,内部以异步/等待方式工作 支持.NET Core / netstandard...在插件启动时添加对作业调度XML文件的急切验证的支持 在TimeZoneUtil中添加对额外的自定义时区解析器功能的支持 变化 作业和插件现在位于独立的程序集NuGet包Quartz.Jobs和Quartz.Plugins...,因为这里我是通过反射来获取程序集和类来进行执行那个Job的   我们把这些配置完成之后点击启动任务就OK啦~~ 这里还有一点小问题……就是程序暂停运行了之后不会自动启动在执行的任务,后面我会慢慢修复

87020
  • 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度

    然后通过程序包管理器控制台来安装Quartz.Net组件,如下: ? Quartz.Net一个最简单任务至少包括三部分实现:job(作业),trigger(触发器)以及scheduler(调度器)。...在Quartz.Net中,一个job(作业)即为一个类,为了让job能在Quartz.Net的体系中执行,我们必须实现Quartz.Net提供的IJob接口的Execute方法,如本例所实现的IJob接口...,这个参数包含了定义这个类的job(作业)的配置信息。...最后通过scheduler.ScheduleJob()方法把job(作业)和 trigger(触发器)注册到了调度器中,这样一个完整的定时任务就定制完成了。...当然,这只是Quartz.Net的简单示例,Quartz.Net还有许多更高级的功能,如支持配置文件的作业调度,支持cron的作业周期等。

    3.8K100

    .NET Core.NET5.NET6 开源项目任务调度组件汇总

    任务执行不是同步的,而是放到一个持久化队列中,以便马上把请求控制权返回给调用者。...Hangfire是在知道托管环境可以杀死每行上的所有线程的情况下制作的。因此,它在成功完成之前不会删除作业,并且包含不同的隐式重试逻辑以在其处理中止时执行该作业。 实例方法调用。...它提供了简单的操作,如调度/非调度作业、启动/停止/暂停调度程序等。   使用Quartz.NET可以定时轮询数据库同步、定时邮件通知、定时处理数据等。...Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。...整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。 .NET Framework 通过 System.Timers.timer 类具有“内置”计时器功能。

    10010

    在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

    在这篇文章中,我将介绍如何使用ASP.NET Core托管服务运行Quartz.NET作业。这样的好处是我们可以在应用程序启动和停止时很方便的来控制我们的Job的运行状态。...它还允许您以集群方式运行应用程序的多个实例,以便在任何时候只能运行一个实例(高可用)。 在本文中,我将介绍创建Quartz.NET作业的基本知识并将其调度为在托管服务中的计时器上运行。...安装Quartz.NET Quartz.NET是.NET Standard 2.0 NuGet软件包,因此非常易于安装在您的应用程序中。...使用上述实现,仅对创建单例(或瞬态)的IJob实现是安全的。 配置作业 我在IJob这里仅显示一个实现,但是我们希望Quartz托管服务是适用于任何数量作业的通用实现。...总结 在这篇文章中,我介绍了Quartz.NET,并展示了如何使用它在ASP.NET Core中的IHostedService中来调度后台作业。

    2.9K20

    .NET Core.NET5.NET6 开源项目汇总2:任务调度组件

    Quartz.NET是.NET平台下应用最早最广泛的老牌定时任务任务调度组件。它是一个功能齐全的开源作业调度系统,从小的应用程序到大型企业系统都可以使用。...它提供了简单的操作,如调度/非调度作业、启动/停止/暂停调度程序等。   使用Quartz.NET可以定时轮询数据库同步、定时邮件通知、定时处理数据等。...Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。...整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。 .NET Framework 通过 System.Timers.timer 类具有“内置”计时器功能。...Hangfire是在知道托管环境可以杀死每行上的所有线程的情况下制作的。因此,它在成功完成之前不会删除作业,并且包含不同的隐式重试逻辑以在其处理中止时执行该作业。 实例方法调用。

    2.3K20

    详细讲解Quartz.NET

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。...它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。 你曾经需要应用执行一个任务吗?...Quartz.NET 通过把作业的状态放在 JobDetail 对象中并让 JobDetail 构造函数启动一个作业的实例,分离了作业的执行和作业周围的状态。...Quartz.NET中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是SimpleTrigger和CronTrigger。...典型地,如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那么或许需要CronTrigger。

    1.9K60

    开源的作业调度框架 - Quartz.NET

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。...它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。 你曾经需要应用执行一个任务吗?...它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业.    ...通过JobDetail类可以完成这个工作,这个类在前面的章节中曾简短提及过。现在,我们花一些时间来讨论Quartz中Jobs的本质和Job实例的生命周期。...幸运的是,已经有了一些现存的助手可以完成这些工作 Quartz.net官方开发指南 第十一课: 高级(企业级)属性 集群只能用在使用ADO.NET-Jobstore的情况。

    1.6K60

    C#.NET.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是...

    在计算机的世界里,定时任务就是在指定的时间或者时间范围内,按照一定的频率完成指定的指令。它是一个具有周期性,规律性的活动。...Quartz.NET Quartz.NET是一个开源的定时作业调度项目,旨在创建一个免费商业使用的作业调度器,同时具有“企业级”的特性。...比 Windows 的任务计划提供更细的触发粒度 良好的可扩展性,它基于接口编程,你可以实现自己的 Schedule 调度器,Job 作业,以及 Trigger 触发器等 持久化,作业可以保存在内存中,...官方地址: https://www.hangfire.io 特性 安装简单,快速入门:没有Windows服务,没有Windows调度程序,不需要单独的应用程序 可持久化:后台作业是在存储中持久存储介质中的...,如:SQL Server、Redis、PostgreSQL、MongoDB等 作业数据透明:内置的web界面允许您查看后台作业的整体情况,以及观察每个后台作业的状态 可靠:后台作业一旦无异常地被创建,

    3.2K20

    Quartz.Net使用教程

    Quartz.Net使用教程 在项目的开发过程中,难免会遇见后需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,这个时候你就需要Quartz.Net了。...Quartz.Net是纯净的,它是一个.Net程序集,是非常流行的Java作业调度系统Quartz的C#实现。 Quartz.Net一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。...触发器描述了在何时执行作业。 添加调度。当完成以上三步以后,就可以对作业进行调度了。...在我们上面的例子中可以看出,添加调度后会立即执行一次,然后重复三次,最终执行了四次。 CronTrigger CronTrigger是通过Cron表达式来完成调度的。...SchedulerListener ISchedulerListener提供了Job、Trigger管理的监听,与调度程序相关的事件包括:添加作业/触发器,删除作业/触发器,调度程序中的严重错误,调度程序关闭的通知等

    2.6K20

    Quartz.Net使用教程

    在项目的开发过程中,难免会遇见后需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,这个时候你就需要Quartz.Net了。...Quartz.Net是纯净的,它是一个.Net程序集,是非常流行的Java作业调度系统Quartz的C#实现。 Quartz.Net一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。...触发器描述了在何时执行作业。 添加调度。当完成以上三步以后,就可以对作业进行调度了。...,也会进行存储 RequestRecovery:请求恢复,指应用崩溃后再次启动,会重新执行该作业 WithIdentity:作业的唯一标识 WithDescription:作业的描述信息 除此之外,Quartz.Net...SchedulerListener ISchedulerListener提供了Job、Trigger管理的监听,与调度程序相关的事件包括:添加作业/触发器,删除作业/触发器,调度程序中的严重错误,调度程序关闭的通知等

    1.5K20

    在.NET Core 中使用Quartz.NET

    Quartz.NET是功能齐全的开源作业调度系统,可用于最小的应用程序到大型企业系统。 Quartz.NET具有三个主要概念: •job:运行的后台任务•trigger:控制后台任务运行的触发器。...WaitForJobsToComplete():当程序关闭时,此设置可确保Quartz.NET在退出之前等待Job正常结束。...现在,您已经将Quartz作为托管服务运行在您的应用程序中,但是现在还没有添加需要运行的Job。 创建一个IJob 这个地方我创建一个简单的服务,并且我可以从构造函数中获取服务。...; return Task.CompletedTask; } } 我还用[DisallowConcurrentExecution]特性,防止Quartz.NET尝试同时运行同一个作业...} } 为了更简单的注册服务,这个地方我简单做了一个封装,这样也更灵活。

    1.3K10

    用abp vNext快速开发Quartz.NET定时任务管理界面

    今天这篇文章我将通过实例代码带着大家一步一步通过abp vNext这个asp.net core的快速开发框架来进行Quartz.net定时任务调度的管理界面的开发。...是什么 Quartz.NET是一个强大、开源、轻量的作业调度框架,你能够用它来为执行一个作业而创建简单的或复杂的作业调度。...定时任务的信息的承载,并完成这个表的增删改查功能,这样我们在对这个表的数据进行操作的同时来进行Quartz.NET定时任务的操作即可实现我们的需求。...这里我不会给你详细讲解Quartz.NET的使用,因为这将占用大量的篇幅,并偏离本文的主旨 安装Quartz.NET的Nuget包: ?...至此Quartz.NET调度任务功能完成 集成 这里我们按照之前的思路对JobInfo跟Quartz.NET任务进行集成 新增时,启动任务: ? 编辑时,更新任务 ?

    2.3K20

    .NET Core开源Quartz.Net作业调度框架实战演练

    一、需求背景 人生苦短,我用.NET Core!...目前在.NET Core开发后台定时任务有两种实现方式: 1、采用AspNetCore自带的HostService, 这是一个轻量级的后台服务, 需要搭配timer完成定时任务。...2、采用第三方开源的Quartz.Net组件,支持简单、复杂灵活的调用作业计划。比较适合我们项目中有大量的业务需求需要使用作业计划。 优点:1)、作业调度计划丰富。2)、与Web应用程序解耦。...如果您同样对本次分享《.NET Core开源Quartz.Net作业调度框架实战演练》课程感兴趣的话,那么请跟着阿笨一起学习吧。废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工。...二、Quartz.Net组件在.NET Core中的实战项目应 ? ? ? ?

    1.2K30

    .NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练

    本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集、整理和完善此系列课程!...如何通过优雅的方式来处理我们实际工作中的后台定时任务。...今天阿笨跟大家分享两款开源的Job作业调度框架,重量级Quartz.NET 和轻量级FluentScheduler,哪怕您之前对Quartz.NET 完全不了解或者了解的不够深刻,阿笨分享的干货,保证让你快速上手撸起袖子就是干...Quartz.NET牛刀小试 2.3、如何基于Quartz.NET封装实现优雅的作业调度执行框架(ABenNet.QuartzNet.Practice) 2.4、Quartz中,对job和trigger...基于Quartz.Net工厂封装实现一行代码搞定作业调度   4.2、如何优雅的封装Quartz.NET实现作业调度框架(基于Topshlf+Quartz.Net封装的实际项目场景运用) TopShelf

    1.3K60

    Python--进程

    当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成...异步:所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。...,后台运行的进程与用户无关,运行在后台并且只在需要时才唤醒的进程,称为守护进程,如电子邮件、web页面、新闻、打印) (2)一个进程在运行过程中开启了子进程(如nginx开启多进程,os.fork,subprocess.Popen...2.不同的是:在UNIX中,子进程的初始地址空间是父进程的一个副本,提示:子进程和父进程是可以有只读的共享内存区的。但是对于windows系统来说,从一开始父进程与子进程的地址空间就是不同的。...:%d" % os.getpid()) ''' # 执行结果 我是父进程:12612 hello xiaobai 我是子进程: 5760;我的父进程id是:12612 ''' 方法一 ?

    87210

    .NET6用起来-Quartz.NET

    Quartz.NET是一个功能齐全的开源作业调用系统,大大小小的应用程序都可使用。...创建一个asp.NET core web项目,使用quartz.NET的作业,定时调用远程接口是否能正常访问,发生异常调用飞书消息接口,把异常发送给指定的同事飞书。...InnerCode = _appSetting.InnerCode, }); } } 请先安装Quartz.AspNetCore nuget包,我使用的是最新的版本...2.Job和Trigger绑定 作业已经实现,何时进行触发呢,Quartz.NET提供了一个trigger的概念。job和trigger进行绑定,Quartz既可以调度我们的job了。...触发器和job的绑定,可以通过代码的方式,也可以通过xml形式(可以通过设置参数ScanInterval支持定期去扫描最新的变动),以下代码演示代码配置的两种方式进行调度我们的作业CheckRemoteApiJob

    1.6K20

    Quartz.NET 3.0 正式发布

    Quartz.NET是一个强大、开源、轻量的作业调度框架,你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。...在2017年的最后一天Quartz.NET 3.0发布,正式支持了.NET Core 和async/await。...https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html 新功能 支持 async/await 基于任务的作业...SQLite也仍然有效,还可以用 增加了对SQL Server内存优化表的初步支持和Quartz.Impl.AdoJobStore.UpdateLockRowSemaphoreMOT 从依赖关系中删除Common.Logging...删除C5 Collections,使用.NET框架内置的Collections 在插件启动时添加对作业调度XML文件的验证 在TimeZoneUtil中添加对额外自定义时区解析器功能的支持 API 不兼容

    992100

    python3--进程

    当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成...在UNIX中该系统调用是:fork,fork会创建一个与父进程一模一样的副本,二者有相同的存储映像、同样的环境字符串和同样的打开文件(在shell解释器进程中,执行一个命令就会创建一个子进程)   2....关于创建子进程,UNIX和windows   1.相同的是:进程创建后,父进程和子进程有各自不同的地址空间(多道技术要求物理层面实现进程之间内存的隔离),任何一个进程的在其地址空间中的修改都不会影响到另外一个进程...2.不同的是:在UNIX中,子进程的初始地址空间是父进程的一个副本,提示:子进程和父进程是可以有只读的共享内存区的。...但是对于windows系统来说,从一开始父进程与子进程的地址空间就是不同的 进程的结束     1.

    85920

    Net作业调度(一) -Quartz.Net入门

    背景 很多时候,项目需要在不同时刻,执行一个或很多个不同的作业。 Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架。...介绍 Quartz一个开源的作业调度框架,OpenSymphony的开源项目。Quartz.Net 是Quartz的C#移植版本。 它一些很好的特性: 1:支持集群,作业分组,作业远程管理。 ...实战 Quartz框架的一些基础概念解释:    Scheduler     作业调度器。    IJob             作业接口,继承并实现Execute, 编写执行的具体作业逻辑。   ...Main(string[] args) { //从工厂中获取一个调度器实例化 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler...Quartz.Net官方2.X教程  http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/index.html Quartz.Net

    1.6K70
    领券