调度通用IJob<>使用Quartz .NET和AdoJobStore

时间:2012-06-20 10:37:02

标签: c# generics scheduler quartz.net jobs

我正在使用Quartz .NET开发简单的调度程序。我希望Quartz在数据库中保留所有作业和触发器,因此我将AdoJobStore和设置为“正常”作业,它可以正常工作。

现在,我遇到了从数据库通用作业反序列化的问题。我上课了:

class DefaultJob<TEventType, TArgsType> : IJob{
 public void Execute(IJobExecutionContext context)
 {
         //do sth
 }
}

使用RamJobStore和DefaultJob&lt;,&gt;一切都很好 - 安排和运行工作。

使用AdoJobStore和DefaultJob&lt;,&gt;我可以安排,Quartz将它保存到数据库(我可以通过Management Studio查看),但是当它试图从数据库恢复它时,我得到了:

A first chance exception of type 'System.ArgumentException' occurred in mscorlib.dll
A first chance exception of type 'Quartz.JobPersistenceException' occurred in Quartz.dll
A first chance exception of type 'Quartz.JobPersistenceException' occurred in Quartz.dll

我对JobFactory进行了调试,根本没有调用NewJob方法。在它之前发生了一些错误。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

我在这里转发Marko Lahma在官方Quartz邮件列表上的答案:

  

Quartz.NET不支持通用作业类型,我觉得它   不应该通过拥有基类来表达它   具有通用定义,您的每个工作都只是继承了这个   class,从而定义泛型类型。

答案 1 :(得分:1)

好。这个问题很老了。似乎需要使用新数据进行更新。现在,Quartz.NET支持通用作业。就这样。问题中的示例现在可以正常运行。

class DefaultJob<TEventType, TArgsType> : IJob {
    public Task Execute(IJobExecutionContext context)
    { }
}