我有一份大工作,代码:
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 ......营销人员)。将来我会添加更多的方法,是否有可能最后一个方法不会触发或石英作业会出错?哪个更好,执行一项大工作或将其分配给多个小型工作。
答案 0 :(得分:4)
Quartz可以处理运行很长时间的作业。但是,您可能遇到运行时间太长而导致另一个作业实例在一个完成之前触发的情况。
您必须根据工作的紧密耦合情况来决定是否可以将工作分成多个工作。例如,给定三个任务:A,B和C.如果这些任务必须按特定顺序执行那么单独的Quartz作业就没有意义,因为不能保证他们将以正确的顺序开火并执行。
如果你真的想把工作分离成他们自己的干净原子单位,那么我建议实现某种消息队列。作业可以对任务A进行排队。当任务A完成时,它负责排队任务B,依此类推。这可确保每个任务按顺序执行一次。