2010-08-17 101 views

回答

0

创建一个抽象基类只是由Quartz.NET文件提出的建议,而不是执行任务链的要求。基本上,他们所提出的建议是,如果你想链的工作:“AJob” - >“BJob” - >“CJob”,你会做什么沿此线:

  1. 创建抽象类“ChainBaseJob”。

  2. 让您的工作类(AJob和BJob都是类型)从ChainBaseJob继承。

  3. ChainBaseJob将包含某种方法,如:

    string GetNextJobInChain() 
    

...这将返回作业的名称(意为石英作业名)。有很多方法可以使用它,但我猜文档建议你的TriggerListener检查(在作业完成方法期间)是否已完成的作业(比如说“AJob”)从ChainBaseJob继承。如果是的话,它会投它并调用GetNextJobInChain,并使用该方法返回的名称调用计划程序在AJob完成时执行它。如果一切都正确实现,则在AJob完成后,TriggerListener将知道执行BJob。

好运。

+0

非常感谢您的解释。如果我将这个基类抽象化,我该如何读取基类中作业的作业数据映射。事情是我的每项工作几乎都有相同的工作细节,如电子邮件地址,用户ID,所以我想在基类属性中读取这些值,所以我不必在每个派生类中重复此代码。如果我让基类非抽象,那么我可以从派生类的构造函数中调用基类的构造函数并读取属性。 我想知道,如果基类是抽象的,那我该如何实现这一点。 – 2010-08-18 15:47:16

+0

这是我做到的。 公共抽象类QuartzJobBase:IJob { public int A {get;组; } public void Execute(JobExecutionContext context) JobDataMap dataMap = context.JobDetail.JobDataMap; A = dataMap.GetInt(“a”); ExecuteInternal(context); } public abstract void ExecuteInternal(JobExecutionContext context);} } 在每个作业的派生类中,重写ExecuteInternal方法。 – 2010-08-18 17:30:55