c# quartz.net 一个大作业或多个小作业

c# quartz.net one big job or small multiple jobs

我有一份大工作,代码:

  public class TbcMailSender : IJob
    {
        public void Execute(IJobExecutionContext context)
        {

            using(EFDbContext _db = new EFDbContext()){
                _db.JobTests.Add(new JobTest
                {
                    Name = "trigger",
                    JobDate = DateTime.Now
                });
                _db.SaveChanges();

               var parserHelper = ParserHelper.GetParserHelper(_db);          
                try
                {
                    parserHelper.Bfm();
                }
                catch (Exception)
                {

                }
                try
                {
                    parserHelper.Bpn();
                }
                catch (Exception)
                {

                }

                try
                {
                    parserHelper.Commersant();
                }
                catch (Exception)
                {

                }
                try
                {
                    parserHelper.Ghn();
                }
                catch (Exception)
                {

                }
                try
                {
                    parserHelper.Ipn();
                }
                catch (Exception)
                {

                }
                try
                {
                    parserHelper.PirveliRadio();
                }
                catch (Exception)
                {

                }
                try
                {
                    parserHelper.Forbes();
                }
                catch (Exception)
                {

                }
                try
                {
                    parserHelper.Marketer();
                }
                catch (Exception)
                {

                }

            }

        }
    }

每种方法大约需要 2-3 分钟(Bfm、Bpn...营销人员)。将来我会添加更多方法,是否有可能最后一个方法不会触发或石英作业会出现错误?哪个更好,执行一项大工作或将其分配给多个小工作。

Quartz 可以处理 运行 很长时间的作业。但是您可能 运行 遇到这样的情况:运行 时间太长以至于另一个作业实例在完成之前触发。

您必须根据工作的紧密耦合程度来决定是否可以将工作拆分为多个作业。例如,给定三个任务:A、B 和 C。如果这些任务 必须以特定顺序执行 那么拥有单独的 Quartz 作业就没有意义,因为没有保证它们会以正确的顺序触发和执行。

如果您真的想将工作隔离到它们自己干净的原子单元中,那么我建议实施某种消息队列。该作业可以对任务 A 进行排队。当任务 A 完成时,它负责对任务 B 进行排队,依此类推。这样可以确保每个任务都按顺序执行一次。