C# 石英调度器。在asp.net应用程序启动期间计划作业

C# 石英调度器。在asp.net应用程序启动期间计划作业,c#,asp.net,task,scheduler,C#,Asp.net,Task,Scheduler,我想在应用程序启动期间使用任务调度器创建线程。 感谢和,我完成了它,但出现了一些问题,作业没有运行,当然是之前初始化的 开始前运行的我的类: [assembly: WebActivatorEx.PreApplicationStartMethod( typeof(Application.App_Start.TaskScheduler), "Start")] namespace Application.App_Start { public static class TaskScheduler

我想在应用程序启动期间使用任务调度器创建线程。 感谢和,我完成了它,但出现了一些问题,作业没有运行,当然是之前初始化的

开始前运行的我的类:

[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);

    }


 }
}
作业未运行


有人能帮我吗?

我也遇到了同样的问题,当时我删除了一个有效的构造函数。首先尝试调用基本构造函数,如果它仍然不起作用,请尝试删除构造函数。

您是否尝试在作业中使用空构造函数

计划程序每次执行作业时,都会在调用其Execute(..)方法之前创建一个新的类实例。这种行为的后果之一是作业必须具有无参数构造函数

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

当触发器触发时,JobDetail(实例定义)它被关联到,并通过调度程序上配置的JobFactory实例化它引用的作业类。默认JobFactory只需使用Activator.CreateInstance调用作业类的默认构造函数,然后尝试调用与JobDataMap中的键名称匹配的类上的setter属性。Y您可能希望创建自己的JobFactory实现,以完成诸如让应用程序的IoC或DI容器生成/初始化作业实例等任务


来源:

好的,你说得对,删除构造函数后作业正在运行。
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();
        }
    }