Esempio n. 1
0
        /// <summary>
        /// 启动一个任务,带重试机制
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public static async Task <bool> StartWithRetry(Guid sid)
        {
            var jk = new JobKey(sid.ToString().ToLower());

            if (await _scheduler.CheckExists(jk))
            {
                return(true);
            }
            ScheduleView view = await GetScheduleView(sid);

            PluginLoadContext lc = null;

            try
            {
                lc = AssemblyHelper.LoadAssemblyContext(view.Schedule.Id, view.Schedule.AssemblyName);
                for (int i = 0; i < 3; i++)
                {
                    try
                    {
                        await Start(view, lc);

                        return(true);
                    }
                    catch (SchedulerException sexp)
                    {
                        LogHelper.Error($"任务启动失败!开始第{i + 1}次重试...", sexp, view.Schedule.Id);
                    }
                }
                //最后一次尝试
                await Start(view, lc);

                return(true);
            }
            catch (SchedulerException sexp)
            {
                AssemblyHelper.UnLoadAssemblyLoadContext(lc);
                LogHelper.Error($"任务所有重试都失败了,已放弃启动!", sexp, view.Schedule.Id);
                return(false);
            }
            catch (Exception exp)
            {
                AssemblyHelper.UnLoadAssemblyLoadContext(lc);
                LogHelper.Error($"任务启动失败!", exp, view.Schedule.Id);
                return(false);
            }
        }
        /// <summary>
        /// 启动一个任务,带重试机制
        /// </summary>
        /// <param name="task"></param>
        /// <param name="callBack"></param>
        /// <returns></returns>
        public static async Task <bool> StartWithRetry(ScheduleView view, Action <Guid, DateTime?> callBack)
        {
            PluginLoadContext lc = null;

            try
            {
                lc = AssemblyHelper.LoadAssemblyContext(view.Schedule.Id, view.Schedule.AssemblyName);
                for (int i = 0; i < 3; i++)
                {
                    try
                    {
                        await Start(view, lc, callBack);

                        return(true);
                    }
                    catch (SchedulerException sexp)
                    {
                        LogHelper.Error($"任务启动失败!开始第{i + 1}次重试...", sexp, view.Schedule.Id);
                    }
                }
                //最后一次尝试
                await Start(view, lc, callBack);

                return(true);
            }
            catch (SchedulerException sexp)
            {
                AssemblyHelper.UnLoadAssemblyLoadContext(lc);
                LogHelper.Error($"任务所有重试都失败了,已放弃启动!", sexp, view.Schedule.Id);
                return(false);
            }
            catch (Exception exp)
            {
                AssemblyHelper.UnLoadAssemblyLoadContext(lc);
                LogHelper.Error($"任务启动失败!", exp, view.Schedule.Id);
                return(false);
            }
        }