c#quartz.net一个大工作或多个小工作
本文关键字:工作 net c#quartz 一个 | 更新日期: 2023-09-27 18:21:36
我有一个大任务,代码:
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…Marketer)。将来我会添加更多的方法,最后一个方法可能不会触发,或者石英作业会出错吗?哪个更好,做一份大工作还是把它分配给多份小工作。
Quartz可以处理运行很长时间的作业。但是,您可能会遇到这样的情况:它运行时间太长,以至于另一个作业实例在一个实例完成之前就启动了。
您必须根据工作的紧密耦合程度来决定是否可以将工作拆分为多个作业。例如,给定三个任务:A、B和C。如果这些任务必须按特定顺序执行,那么拥有单个Quartz作业是没有意义的,因为无法保证它们会按正确顺序启动和执行。
如果您真的想将工作隔离到自己的干净原子单元中,那么我建议实现某种消息队列。作业可以对任务A进行排队。当任务A完成时,它负责对任务B进行排队,依此类推。这确保了每个任务都按顺序执行一次。