/// <summary>
        /// use SettingCronJobBuilder for preparing SettingCronJob
        /// </summary>
        /// <param name="recurringJobManager"></param>
        /// <param name="settingsManager"></param>
        /// <param name="settingCronJob"></param>
        /// <returns></returns>
        public static Task WatchJobSettingAsync(this IRecurringJobManager recurringJobManager,
                                                ISettingsManager settingsManager,
                                                SettingCronJob settingCronJob)
        {
            if (recurringJobManager == null)
            {
                throw new ArgumentNullException(nameof(recurringJobManager));
            }
            if (settingsManager == null)
            {
                throw new ArgumentNullException(nameof(settingsManager));
            }

            _observedSettingsDict.AddOrUpdate(settingCronJob.EnableSetting.Name, settingCronJob, (settingName, сronJob) => settingCronJob);
            _observedSettingsDict.AddOrUpdate(settingCronJob.CronSetting.Name, settingCronJob, (settingName, сronJob) => settingCronJob);

            return(recurringJobManager.RunOrRemoveJobAsync(settingsManager, settingCronJob));
        }
 /// <summary>
 /// use SettingCronJobBuilder for preparing SettingCronJob
 /// </summary>
 /// <param name="recurringJobManager"></param>
 /// <param name="settingsManager"></param>
 /// <param name="settingCronJob"></param>
 /// <returns></returns>
 public static void WatchJobSetting(this IRecurringJobManager recurringJobManager,
                                    ISettingsManager settingsManager,
                                    SettingCronJob settingCronJob)
 {
     recurringJobManager.WatchJobSettingAsync(settingsManager, settingCronJob).GetAwaiter().GetResult();
 }
        private static async Task RunOrRemoveJobAsync(this IRecurringJobManager recurringJobManager, ISettingsManager settingsManager, SettingCronJob settingCronJob)
        {
            var processJobEnable = await settingsManager.GetValueAsync(settingCronJob.EnableSetting.Name, (bool)settingCronJob.EnableSetting.DefaultValue);

            if (processJobEnable)
            {
                var cronExpression = await settingsManager.GetValueAsync(settingCronJob.CronSetting.Name, settingCronJob.CronSetting.DefaultValue.ToString());

                recurringJobManager.AddOrUpdate(
                    settingCronJob.RecurringJobId,
                    settingCronJob.Job,
                    cronExpression,
                    settingCronJob.TimeZone,
                    settingCronJob.Queue);
            }
            else
            {
                recurringJobManager.RemoveIfExists(settingCronJob.RecurringJobId);
            }
        }