2

好的,这是一个新手问题,我通过网络搜索找不到任何线索,这是我的问题:

从示例通常触发器和使用IScheduler.ScheduleJob(job, trigger)现在安排的作业中,我使用了我尝试使用的 JobFactory,IScheduler.ScheduleJob(trigger)但以触发器的相关作业名称不能为空异常结束

这是我的简单代码:

工作

class DummyJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        Console.WriteLine("executed");
    }
}

工作工厂

class JobFactory : IJobFactory
{
    public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
    {
        return new DummyJob();
    }
}

主程序

class Program
{
    static void Main(string[] args)
    {
        ISchedulerFactory sf = new StdSchedulerFactory();
        IScheduler sc = sf.GetScheduler();

        ITrigger trigger = TriggerBuilder.Create()
            .ForJob()
            .StartAt(DateTime.Now.AddSeconds(5))
            .Build();

        sc.JobFactory = new JobFactory();
        sc.ScheduleJob(trigger);
        sc.Start();

        Console.WriteLine("waiting...");
        Console.ReadLine();
        sc.Shutdown();
    }
}

任何的想法?

4

1 回答 1

3

就调度而言,我认为您不应该仅仅因为您使用自己的 JobFactory 而做任何不同的事情。

您的主程序无效,因为它不知道您要安排什么工作。

您的示例可能过于简化,并没有给出明确的想法或您试图通过 JobFactory 实现的目标,但也许值得指出 JobFactory 的目的不是指定要运行作业,而是指定如何运行一个特定的作业应该开始,因此期望 bundle.JobDetail 包含有关运行哪个作业的信息。

于 2012-09-12T11:04:05.517 回答