Quartz .net 6:执行方法不起作用

问题描述 投票:0回答:1

Ijob中的Exetuce方法没有被触发。

类库代码:

   public static async void Start()
        {
            try
            {
                using (var dbContext = new SqlDbContext())
                {
                    ISchedulerFactory schedContext = new StdSchedulerFactory();
                    var scheduler = schedContext.GetScheduler();

                    if (!scheduler.Result.IsStarted)
                    {
                         await scheduler.Result.Start();
                    }

                    Console.WriteLine("job1 trigger job bağlama");


                    //IJobDetail job = JobBuilder.Create<Job>().WithIdentity(jobItem.JOB_KEY, "group1").Build();
                            IJobDetail job = JobBuilder.Create<JobExecuteService>().WithIdentity("JobExecuteService", "MailGrup").Build();



                            //ITrigger trigger = TriggerBuilder.Create()
                            //    .WithSchedule(CronScheduleBuilder
                            //        .DailyAtHourAndMinute(jobItem.JOB_TIME.Hours, jobItem.JOB_TIME.Minutes)
                            //        .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Turkey Standard Time"))
                            //    )
                            //    .WithDescription(jobItem.DESCRIPTION)
                            //    .Build();

                            //ISimpleTrigger TriggerGorev = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("JobExecuteService").StartAt(DateTime.UtcNow).WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()).Build();



                            //                        var example = TriggerBuilder.Create()
                            //.WithIdentity("JobExecuteService", "MailGrup")
                            //.ForJob("JobExecuteService", "MailGrup")
                            //.WithSimpleSchedule(o =>
                            //{
                            //    o.WithRepeatCount(5)
                            //        .WithInterval(TimeSpan.FromMinutes(1));
                            //})
                            //.Build();


                            ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("trigger3", "group1")
    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10,25))
    .ForJob(job)
    .Build();

                           await  scheduler.Result.ScheduleJob(job, trigger);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }




public class JobExecuteService: IJob
    {
        private readonly IPublisherService _publisherService;
        private IConfiguration Configuration { get; }
        public JobExecuteService(IPublisherService PublisherService, IConfiguration configuration)
        {
            _publisherService = PublisherService;
            Configuration = configuration;
        }

        public async Task Execute(IJobExecutionContext context)
        {
            try
            {
              
                Task taskA = new Task(() => Console.WriteLine("Hello from task at {0}", DateTime.Now.ToString()));
                taskA.Start();
                await Console.Out.WriteLineAsync("HelloJob is executing.");
            }
            catch (Exception ex)
            {
                throw new ArgumentNullException(nameof(context));
            }
            //return Task.FromResult(result);
            
        }
}

我尝试了各种方法。我尝试了一千件事。但事实并非如此。注释行中的方法是我一直尝试过的方法。Quartz 方法是在库中定义的。 Quartz升降部分定义在mvc项目的program.cs文件中。以上代码定义在library项目中。 下面的代码在mvc项目中。通过引用相互链接。

mvc代码程序.cs:

builder.Services.AddQuartz(q =>
{
    // Joblarımı oluşturduğum servisi başlatıyorum
    JobSchedulerService.Start();
    q.UseMicrosoftDependencyInjectionJobFactory();
});
// ASP.NET Core hosting
builder.Services.AddQuartzServer(options =>
{
    // when shutting down we want jobs to complete gracefully
    options.WaitForJobsToComplete = true;
});

更新:我从头开始打开一个项目,并在单个项目中使用相同的代码进行尝试。它发生了。所以问题是因为我在不同的项目中进行配置。我想在类库项目中使用我的石英代码。但我的主要项目是mvc项目。我该如何配置?

更新2:它不起作用,因为我在JobExecuteService类中创建了一个构造函数。当我不创建构造函数时它会起作用。但我需要创建构造函数。我怎样才能克服这个问题?

c# .net task quartz.net class-library
1个回答
0
投票

好吧,我直接在执行方法上使用configurationBuilder解决了这个问题:

    IConfiguration _configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();

IDsService _services = new DsService(_configuration);
© www.soinside.com 2019 - 2024. All rights reserved.