/// <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); } }