Example #1
0
 /// <summary>
 /// 停止一个任务
 /// </summary>
 /// <param name="taskId"></param>
 /// <param name="callBack"></param>
 /// <returns></returns>
 public static bool Stop(Guid taskId)
 {
     try
     {
         JobKey jk  = new JobKey(taskId.ToString().ToLower());
         var    job = _scheduler.GetJobDetail(jk);
         if (job != null)
         {
             var instance = job.JobDataMap["instance"] as TaskBase;
             //释放资源
             if (instance != null)
             {
                 instance.Dispose();
             }
             //卸载应用程序域
             var domain = job.JobDataMap["domain"] as AppDomain;
             AssemblyHelper.UnLoadAppDomain(domain);
             //删除quartz有关设置
             var trigger = new TriggerKey(taskId.ToString());
             _scheduler.PauseTrigger(trigger);
             _scheduler.UnscheduleJob(trigger);
             _scheduler.DeleteJob(jk);
             _scheduler.ListenerManager.RemoveJobListener(taskId.ToString());
         }
         LogHelper.Info($"任务已经停止运行!", taskId);
         return(true);
     }
     catch (Exception exp)
     {
         LogHelper.Error($"任务停止失败!", exp, taskId);
         return(false);
     }
 }
Example #2
0
        /// <summary>
        /// 启动一个任务,带重试机制
        /// </summary>
        /// <param name="task"></param>
        /// <param name="callBack"></param>
        /// <returns></returns>
        public static bool StartWithRetry(Task task)
        {
            AppDomain ad = null;

            try
            {
                //这里用AppDomain解决程序集引用依赖的问题
                ad = AssemblyHelper.LoadAppDomain(task.AssemblyName);
                for (int i = 0; i < 3; i++)
                {
                    try
                    {
                        Start(task, ad);
                        return(true);
                    }
                    catch (SchedulerException sexp)
                    {
                        LogHelper.Error($"任务启动失败!开始第{i + 1}次重试...", sexp, task.Id);
                    }
                }
                //最后一次尝试
                Start(task, ad);
                return(true);
            }
            catch (SchedulerException sexp)
            {
                AssemblyHelper.UnLoadAppDomain(ad);
                LogHelper.Error($"任务所有重试都失败了,已放弃启动!", sexp, task.Id);
                return(false);
            }
            catch (Exception exp)
            {
                AssemblyHelper.UnLoadAppDomain(ad);
                LogHelper.Error($"任务启动失败!", exp, task.Id);
                return(false);
            }
        }