Quartz调度程序。在asp.net应用程序启动期间安排作业

时间:2015-10-13 06:47:59

标签: c# asp.net task scheduler

我想在应用程序启动期间使用任务调度程序创建线程。 我感谢thisthis,但出了问题,工作没有运行,当然是在之前初始化了。

我的课程在开始之前运行:

[assembly: WebActivatorEx.PreApplicationStartMethod(
typeof(Application.App_Start.TaskScheduler), "Start")]
namespace Application.App_Start
{
    public static class TaskScheduler
{
    private static readonly IScheduler scheduler = new StdSchedulerFactory().GetScheduler();

    private static void CreateTaskToDeleteTmpFiles(Object sender)
    {
        scheduler.Start();

        //Create job which will be add to thread
        IJobDetail job = JobBuilder.Create<DeleteTmpJob>()
            .WithIdentity("ClearTmpFiles")
            .StoreDurably()
            .Build();

        //Create thread which run the job after specified conditions
        ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity("ClearTmpFiles")
            .StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))
            .Build();

        //Add Job and Trigger to scheduler
        scheduler.ScheduleJob(job, trigger);

    }


 }
}

我的工作班:

public class DeleteTmpJob : IJob
    {
        private IDocumentStore documentStore;
        private IUploaderCollection uploaderCollection;

        public DeleteTmpJob(IDocumentStore _documentStore, IUploaderCollection _uploaderCollection)
        {
            documentStore = _documentStore;
            uploaderCollection = _uploaderCollection;
        }

        public void Execute(IJobExecutionContext context)
        {
            documentStore.ClearTmpDirectory();
        }
    }

作业未运行

任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:1)

当我删除构造函数时,我遇到了同样的问题。首先尝试调用基础构造函数,如果它仍然无法工作,请尝试删除构造函数。

答案 1 :(得分:1)

您是否尝试过为您的工作使用空构造函数?

  

“调度程序执行作业的每个(和每个)时间,它在调用其Execute(..)方法之前创建该类的新实例。此行为的一个后果是作业必须为no -arguement构造函数。“

您可能需要实现自己的JobFactory才能使用DI。如何实现它取决于您使用的库。

  

“当触发器触发时,它所关联的JobDetail(实例定义)被加载,它引用的作业类通过Scheduler上配置的JobFactory实例化。默认的JobFactory只调用作业的默认构造函数class使用Activator.CreateInstance,然后尝试在类上调用与JobDataMap中的键名匹配的setter属性。您可能想要创建自己的JobFactory实现来完成诸如使用应用程序的IoC或DI容器之类的事情生成/初始化作业实例。“

来源:see here