Quartz.Net系列(四):Quartz五大构件(Scheduler,Job,Trigger,ThreadPool、JobStore)之ThreadPool、JobStore解析

整体示意图:

1.DefaultThreadPool

如果不存在PropertyThreadPoolType,那么就使用DefaultThreadPool

var threadPoolTypeString = cfg.GetStringProperty(PropertyThreadPoolType).NullSafeTrim();
if (threadPoolTypeString != null
    && threadPoolTypeString.NullSafeTrim().StartsWith("Quartz.Simpl.SimpleThreadPool", StringComparison.OrdinalIgnoreCase))
{
    // default to use as synonym for now
    threadPoolTypeString = typeof(DefaultThreadPool).AssemblyQualifiedNameWithoutVersion();
}

Type tpType = loadHelper.LoadType(threadPoolTypeString) ?? typeof(DefaultThreadPool);

try
{
    tp = ObjectUtils.InstantiateType<IThreadPool>(tpType);
}
catch (Exception e)
{
    initException = new SchedulerException("ThreadPool type '{0}' could not be instantiated.".FormatInvariant(tpType), e);
    throw initException;
}
tProps = cfg.GetPropertyGroup(PropertyThreadPoolPrefix, true);

最终的执行都是要委托给线程池:默认10个工作线程[WorkThread]+一个调度线程[QuartzSchedulerThread]

QuartzSchedulerThread

QuartzSchedulerThread=> public async Task Run()

2.RAMJobStroe

如果不存在PropertyJobStoreType,那么就使用RAMJobStore

Type jsType = loadHelper.LoadType(cfg.GetStringProperty(PropertyJobStoreType));
try
{
    js = ObjectUtils.InstantiateType<IJobStore>(jsType ?? typeof(RAMJobStore));
}
catch (Exception e)
{
    initException = new SchedulerException("JobStore of type '{0}' could not be instantiated.".FormatInvariant(jsType), e);
    throw initException;
}

获取最近的trigger

private readonly SortedSet<TriggerWrapper> timeTriggers = new SortedSet<TriggerWrapper>(new TriggerWrapperComparator()); 

通过JobRunShell运行Job 

原文地址:https://www.cnblogs.com/vic-tory/p/13129674.html