2010-08-17 174 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